如何知道什么memcached节点来查找其数据?

我对Memcached集群的世界很陌生

如果我有一个正在使用memcache的php web应用程序 – 它是如何做它的散列,并决定检查特定值的节点,以避免检查所有的。

奖金:如何轻松添加节点,避免重build所有散列。

Memcache客户端通过散列键值来知道要检查哪个节点。 默认情况下,它使用密钥的crc32值。 在旧的风格,你会做类似的事情

serverId = crc32(key) % servers.size 

这意味着当你添加一个新的服务器节点时,大部分的事情都会重新映射到不同的节点。

对于你的奖金,使用新的风格,其中每个节点覆盖由随机select的服务器数量而不是每N个值确定的crc值的线性范围。 这被称为一致哈希。

  • PHP的configuration
  • 文章描述了一致的哈希
  • 另一篇文章描述了一致的哈希