1

尽管我在互联网上进行了很多搜索,但我无法回答一些关于 memcached 的问题。

  1. PHP 的 memcached 模块使用的一致性哈希算法是什么?
  2. 它的设置是什么(即在环上添加服务器多少次?)
  3. 一致性哈希数组(连续环)是缓存在某处,还是在每次脚本执行时重新计算?如果是后者,这会导致性能问题/计算能力的浪费吗?

谢谢

4

1 回答 1

2
  1. PHP 的 memcached 模块使用的哈希算法是什么?

根据您的需要有不同的。有关选项,请参阅此页面:http: //php.net/manual/en/memcached.constants.php 您可以对池中的实例数使用标准模运算 ( DISTRIBUTION_MODULA),或一致的散列密钥分配算法 ( DISTRIBUTION_CONSISTENT) . 如果需要,还有项目键本身的哈希算法选项(HASH_)。

如果您要经常将实例从池中删除,您应该查看一致的散列方法。我从未真正使用过它,并且可能应该使用它,因为它可以减轻服务器故障的影响,走这条路并没有对性能造成可衡量的影响……事后看来,这似乎是不费吹灰之力。认为 memcached 扩展可能应该将默认值更改为该扩展。我已经读过,通过一致的散列,您可以预期丢失 10-25% 的密钥(或者在池中有更多服务器时丢失更少),而使用默认方法可能更接近 100% 的丢失。

更具体地说,一致算法基于libketama。那里的自述文件很好地总结了它的产生原因和工作原理。

  1. 它的设置是什么(即在环上添加服务器多少次?)

我不确定我明白你在这里问什么。每台新服务器在连续体中添加了多少“滴答声”?认为我们需要更多地研究 ketama lib - 猜测它试图在性能和更少的关键失误之间取得平衡。

  1. 哈希数组(连续环)是缓存在某处,还是在每次脚本执行时重新计算?如果是后者,这会导致性能问题/计算能力的浪费吗?

老实说,不是100%肯定。虽然这可能是一种浪费的计算,但似乎仍然很琐碎——md5 算法和一些算术。我只能说 Memcached 非常快。如果您需要高可用性、持久的分布式存储,您可能会考虑其他类似 couchDB 的东西。Memcached 非常擅长它的作用......在“小”值的内存键/值存储中。

您可能会喜欢这些文章:

于 2015-07-30T18:51:46.903 回答