Memcached发行版

我有一个关于跨节点的memcached分布的问题。 我们有20个memcached节点,每个节点有200GB的memcached。 我们的应用是PHP应用。

$memcache->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT); 

如果发生以下情况,结果如何?

  1. 节点2停机
  2. 节点2上的密钥“XXX”要求设置

    =>我想这个密钥会写在另一个节点上,也许是节点5

  3. 节点2回来了
  4. 尝试获得密钥“XXX”。

哪个节点将memcached获取密钥:节点5或节点2?

该节点是基于散列algorithm来select的,该algorithm决定如何在可用主机之间分配密钥。 您可以阅读PHP客户端库提供的两种分发types,searchMemcached::DISTRIBUTION_MODULAMemcached::DISTRIBUTION_CONSISTENT分发algorithm。

随着节点的添加或删除,可能会导致获取/存储任何特定的密钥在相同或不同的节点上落地,但最终不会有问题。 您仍然会在新节点中的caching未命中时填充密钥,并且其他节点中的相同密钥的任何旧值都不会被访问并过期并消失。

在存储方面,Memcache比银行更像一张床垫。