gpt4 book ai didi

java - 将 Memcached 客户端从 Memcached-Java-Client 迁移到 Xmemcached

转载 作者:行者123 更新时间:2023-11-30 11:56:07 26 4
gpt4 key购买 nike

我有一个基于 danga 客户端的旧 memcached 客户端实现,但稍作修改。我想这个客户现在叫Memcached-Java-Client .

我手头的实现是旧的、未维护的,而且似乎是伪造的。

我需要将客户端迁移到具有以下限制的较新客户端:

  1. 我需要新的客户端散列算法与旧的兼容。如果不满足此限制条件,我们将不得不(至少部分)使网站不可用几个小时。
  2. 支持多种序列化方式,并允许序列化方式的扩展。
  3. 与现有客户相比,性能有所提高。
  4. 兼容 Moxi

当前的实现使用了一种一致性哈希算法,该算法似乎与 Xmemcached 使用的一致性哈希兼容。除了我无法获得由旧客户端存储并使用 Xmemcached 客户端获取的 key 的缓存命中。

我调试了代码,得到了相同的哈希码,但我认为服务器环不同,因此整体哈希方法不同。

这是我用来初始化 xmemcached 客户端的代码:

  final MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("server:11211 server:11212 server:11213 server:11214"));
builder.setCommandFactory(new BinaryCommandFactory());
builder.setSessionLocator(new KetamaMemcachedSessionLocator());
builder.setTranscoder(new WhalinTranscoder());
memcachedClient = builder.build();

我也愿意给spymemcached如果我无法让 xmemcached 工作,请尝试一下,但我更喜欢后者。

编辑:我也试过 spymemcached,但无法让它与我当前的客户端兼容。这是我的 spymemcached 客户端初始化代码:

final ConnectionFactoryBuilder builder = new ConnectionFactoryBuilder();
builder.setProtocol(Protocol.BINARY);
builder.setTranscoder(WhalinTranscoder());
builder.setHashAlg(HashAlgorithm.KETAMA_HASH);
builder.setLocatorType(Locator.CONSISTENT);
final MemcachedClient client = MemcachedClient(builder.build(), AddrUtil.getAddresses("server:11211 server:11212 server:11213 server:11214"));

最佳答案

据我了解,您将遇到与使用 spymemcached 的 xmemcached 相同的问题。正如我之前在这里提到的- http://bugs.membase.org/browse/MB-1484 ,您现在使用的一致性哈希是加权一致性哈希,而不是其他 2,这就是为什么您丢失了一些 key 。

关于java - 将 Memcached 客户端从 Memcached-Java-Client 迁移到 Xmemcached,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com