7

我一直无法在 Amazon Cloud 上找到有关 Memcached 的好教程,而且我对整个缓存的事情还很陌生。我正在尝试通过 Amazon 的 ElastiCache 服务和 spymemcached 客户端使用 memcached 来实际进行 memcached 调用。

这是我现在在 Java 中所做的事情:

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();
    }

我尝试这个时得到的错误是:

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

有人对此有任何想法或经验吗?谢谢!

4

1 回答 1

2

你在哪里执行这个?从 EC2 实例中或从外部网络。请记住,ElastiCache 服务器受限制对 ElastiCAche 实例的访问的安全组的约束。因此,请检查允许您连接到 Memcached 服务器的安全组和其他配置。据我所知,无法从 AWS 边界外部访问 ElastiCache

其余代码看起来不错,cConsider 使用像 Spring 这样的框架来处理 memcache 客户端对象实例化和相关配置。

于 2012-03-21T09:01:58.233 回答