尽管我在互联网上进行了很多搜索,但我无法回答一些关于 memcached 的问题。
- PHP 的 memcached 模块使用的一致性哈希算法是什么?
- 它的设置是什么(即在环上添加服务器多少次?)
- 一致性哈希数组(连续环)是缓存在某处,还是在每次脚本执行时重新计算?如果是后者,这会导致性能问题/计算能力的浪费吗?
谢谢
尽管我在互联网上进行了很多搜索,但我无法回答一些关于 memcached 的问题。
谢谢
- PHP 的 memcached 模块使用的哈希算法是什么?
根据您的需要有不同的。有关选项,请参阅此页面:http: //php.net/manual/en/memcached.constants.php 您可以对池中的实例数使用标准模运算 ( DISTRIBUTION_MODULA
),或一致的散列密钥分配算法 ( DISTRIBUTION_CONSISTENT
) . 如果需要,还有项目键本身的哈希算法选项(HASH_
)。
如果您要经常将实例从池中删除,您应该查看一致的散列方法。我从未真正使用过它,并且可能应该使用它,因为它可以减轻服务器故障的影响,走这条路并没有对性能造成可衡量的影响……事后看来,这似乎是不费吹灰之力。认为 memcached 扩展可能应该将默认值更改为该扩展。我已经读过,通过一致的散列,您可以预期丢失 10-25% 的密钥(或者在池中有更多服务器时丢失更少),而使用默认方法可能更接近 100% 的丢失。
更具体地说,一致算法基于libketama。那里的自述文件很好地总结了它的产生原因和工作原理。
- 它的设置是什么(即在环上添加服务器多少次?)
我不确定我明白你在这里问什么。每台新服务器在连续体中添加了多少“滴答声”?认为我们需要更多地研究 ketama lib - 猜测它试图在性能和更少的关键失误之间取得平衡。
- 哈希数组(连续环)是缓存在某处,还是在每次脚本执行时重新计算?如果是后者,这会导致性能问题/计算能力的浪费吗?
老实说,不是100%肯定。虽然这可能是一种浪费的计算,但似乎仍然很琐碎——md5 算法和一些算术。我只能说 Memcached 非常快。如果您需要高可用性、持久的分布式存储,您可能会考虑其他类似 couchDB 的东西。Memcached 非常擅长它的作用......在“小”值的内存键/值存储中。
您可能会喜欢这些文章: