我正在尝试将 Elasticache 作为 Memcache 服务与 AWS 的 java Elasticache 客户端库一起使用。
以下代码适用于连接到集群:
_client = new MemcachedClient(_serverList);
但是我尝试使用一致性哈希会导致内存缓存客户端无法初始化:
_client = new MemcachedClient(new KetamaConnectionFactory(), _serverList);
或
ConnectionFactoryBuilder connectionFactoryBuilder = new ConnectionFactoryBuilder();
connectionFactoryBuilder.setLocatorType(Locator.CONSISTENT);
connectionFactoryBuilder.setHashAlg(DefaultHashAlgorithm.KETAMA_HASH);
connectionFactoryBuilder.setClientMode(ClientMode.Dynamic);
ConnectionFactory connectionFactory = connectionFactoryBuilder.build();
_client = new MemcachedClient(connectionFactory, _serverList);
我尝试使用除普通 MemcacheClient 之外的任何内容都会导致如下错误:
2015-04-07 07:00:32.914 WARN net.spy.memcached.ConfigurationPoller: The configuration is null in the server localhost 2015-04-07 07:00:32.914 WARN net.spy.memcached.ConfigurationPoller: Number of consecutive poller errors is 7. Number of minutes since the last successful polling is 0
此外,我还使用 telnet、spymecached 库和普通 MemcacheClient 构造函数验证了安全组是宽松的。
最佳答案
使用 AWS 客户端库时 KetamaConnectionFactory
默认为“动态”客户端模式,该模式尝试从配置终端节点轮询可用 memcached 节点的列表。为此,您的 _serverList
应仅包含配置端点。
您的错误消息表明主机是一个“普通”memcached 节点,它不理解 ElastiCache 扩展。如果这是您打算做的(自己指定节点而不是使用自动发现功能),那么您需要使用多参数 KetamaConnectionFactory
构造函数并传入 ClientMode.Static
作为第一个参数。
关于java - 如何在 java elasticache 库中使用一致性哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29485767/