首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Memcached客户端从Memcached-Java-Client迁移到Xmemcached

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

Stack Overflow用户
提问于 2011-01-12 18:08:03
回答 2查看 3.1K关注 0票数 2

我有一个基于danga客户端的旧memcached客户端实现,但略有修改。我认为这个客户现在被称为Memcached-Java-客户机

我手头的实现是旧的,没有维护的,而且似乎是假的。

我需要将客户机迁移到具有以下约束的较新客户端:

  1. 我需要新的客户端哈希算法,以兼容旧的。如果这一限制没有得到满足,我们将不得不使网站(至少部分)在几个小时内不可用。
  2. 支持各种序列化方法,并允许序列化方法的可扩展性。
  3. 与我现有的客户端相比,性能有所提高。
  4. 墨溪兼容

当前的实现使用一致的散列算法,该算法似乎与Xmemcached使用的一致散列兼容,只是我无法对旧客户端存储并与Xmemcached客户端获取的密钥进行缓存命中。

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

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

代码语言:javascript
复制
  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();

如果我不能让xmemcached工作,我也愿意给间谍一次尝试,但我更喜欢后者。

编辑:我也尝试过spymemcached,但无法使它与我当前的客户端兼容。下面是我的间谍缓存客户端初始化代码:

代码语言:javascript
复制
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"));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-16 10:27:49

我的旧danga客户端似乎与Xmemcached/Spymemcached客户机不兼容,原因很简单: danga客户机散列主机:端口字符串,而后面的客户机散列InetSocketAddress,这实际上等于主机/IP:端口。

由于这个事实,我无法在迁移到较新的客户端时保持兼容。实际上,Xmemcached客户端和Spymemcached客户端都是可扩展的,并且允许在实现这一点方面提供一些支持,但是这样做对我的偏好来说太“烦人”了。

我决定要做的是迁移我的代码,根据基准测试结果使用Xmemcached/Spymemcached中的一个。这两种算法都与moxi的哈希算法兼容。我最终可能只使用客户端moxi -取决于它将增加的开销。我最喜欢这个选项,因为它使应用程序配置更加简单。

票数 0
EN

Stack Overflow用户

发布于 2011-01-12 20:27:28

按照我的理解,您将遇到与使用间谍缓存的xmemcached相同的问题。正如我前面提到的- http://bugs.membase.org/browse/MB-1484,您现在使用的一致散列是加权一致散列,而不是其他2,这就是为什么您缺少一些键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4672284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档