java - 如何在 java elasticache 库中使用一致性哈希?

标签 java amazon-elasticache consistent-hashing

我正在尝试将 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/

相关文章:

java - 无论顺序如何,Hashset 上的 .equals 是否返回 true?

amazon-web-services - 无法将 redis-cli 与亚马逊 elasticache 连接

java - 如何生成HashCode以调用google/guava的Hashing#consistentHash?

java - 使用 Streams 通过特定属性获取两个列表之间的共同元素和差异

java - ci.gitlab.com 是否支持托管 Java 构建?

java - 使用第一个协和调用的结果对象作为第二个协和调用中的arg

amazon-web-services - AWS Redis 安全组示例

php - Elasticache PHP Redis AWS 在 Laravel 中移动异常

scala - 来自 Scala 和 Guava 的 Murmur3 的不同结果

php - 随着目标集的增长,循环哈希能否保持一致?