I haven't been able to find a good tutorial on Memcached on Amazon Cloudand I'm very new to this whole caching thing. I am trying to use memcached through Amazon's ElastiCache service and with a spymemcached client to actually make the memcached calls.
Here's what I'm doing in Java right now:
try {
ConnectionFactoryBuilder connectionFactoryBuilder = new ConnectionFactoryBuilder();
MemcachedClient memcachedClient = new MemcachedClient(
connectionFactoryBuilder.build(),
AddrUtil.getAddresses("<beginning of cache node end point grabbed from AWS Console>.cache.amazonaws.com:11211"));
memcachedClient.set("test", 12, new Integer(12));
System.out.println(memcachedClient.get("test"));
} catch (IOException ioException) {
ioException.printStackTrace();
}
The error that I get when I try this is:
java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:414)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:278)
at net.spy.memcached.MemcachedClient.run(MemcachedClient.java:1981)
2012-02-01 19:25:35.415 WARN net.spy.memcached.MemcachedConnection: Closing, and reopening {QA sa=<node endpoint>.cache.amazonaws.com/184.73.64.56:11211, #Rops=0, #Wops=2, #iq=0, topRop=null, topWop=net.spy.memcached.protocol.ascii.StoreOperationImpl@be8c3e, toWrite=0, interested=0}, attempt 1.
net.spy.memcached.OperationTimeoutException: Timeout waiting for value
at net.spy.memcached.MemcachedClient.get(MemcachedClient.java:1142)
at net.spy.memcached.MemcachedClient.get(MemcachedClient.java:1157)
at com.amazon.imaging.demo.SQSQueueManager.requeue(SQSQueueManager.java:117)
at com.amazon.imaging.demo.SQSQueueManager.requeue(SQSQueueManager.java:88)
at com.amazon.imaging.demo.DemoUI$4.run(DemoUI.java:368)
at com.amazon.imaging.demo.DemoUI.main(DemoUI.java:391)
Caused by: net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting for operation - failing node: <node endpoint>.cache.amazonaws.com/184.73.64.56:11211
at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:65)
at net.spy.memcached.internal.GetFuture.get(GetFuture.java:37)
at net.spy.memcached.MemcachedClient.get(MemcachedClient.java:1135)
... 5 more
Anyone got any ideas or experience with this? Thanks!
Where are you executing this? From with in a EC2 instance or from an external network. Remember that ElastiCache servers are bound by the security group which restricts the access to the ElastiCAche instances. So checkout the security group and other configurations that allow you to connect to the Memcached server. as far as I know, ElastiCache cannot be accessed from outside AWS boundary
Rest of the code looks fine and cConsider using a framework like Spring to handle the memcache client object instantiation and related configuration.