我有一个关于跨节点的memcached分布的问题。 我们有20个memcached节点,每个节点有200GB的memcached。 我们的应用是PHP应用。
$memcache->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
如果发生以下情况,结果如何?
节点2上的密钥“XXX”要求设置
=>我想这个密钥会写在另一个节点上,也许是节点5
哪个节点将memcached获取密钥:节点5或节点2?
该节点是基于散列algorithm来select的,该algorithm决定如何在可用主机之间分配密钥。 您可以阅读PHP客户端库提供的两种分发types,searchMemcached::DISTRIBUTION_MODULA和Memcached::DISTRIBUTION_CONSISTENT分发algorithm。
随着节点的添加或删除,可能会导致获取/存储任何特定的密钥在相同或不同的节点上落地,但最终不会有问题。 您仍然会在新节点中的caching未命中时填充密钥,并且其他节点中的相同密钥的任何旧值都不会被访问并过期并消失。
在存储方面,Memcache比银行更像一张床垫。