我得到了一个看起来像这样的脚本示例:
$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211);
$memcache->addServer('memcache_host2', 11211);
如果我现在使用
$memcache->set('var_key', 'some really big variable');
当然,存储密钥get / value(仅在一台服务器上)。但是当我重新订购Memcache Serverlist时,它会重新创建缓存。我注意到它总是使用第二个服务器......但为什么呢?
我只想知道并了解如何生成存储的哈希值。 哪些因素与哈希和服务器选择有关?
我找不到任何关于。
问候!
答案 0 :(得分:1)
答案是:
crc32($KEY) % Server.length
所以在我的情况下,我有两个带有Sample键“var_key”的服务器。
crc32('var_key')%2
结果是0.所以第一个服务器是幸运的!
crc32('var_key_bit_longer_and_longer')%2
在这种情况下,第二个服务器(Result为1)被选中。
我们可以看到,以下因素是相关的:
这就是为标准哈希策略选择服务器的方式。
答案 1 :(得分:0)
我不确定如何实现hashing algorithm works
但是客户端库如何在密钥上运行CRC并对列表中的实例数量进行模数以从列表中为集合/获取选择实例
更好的是,您可以使用50-50
选项增加weight
选择的每台服务器的更改
$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211,true,50);
$memcache->addServer('memcache_host2', 11211,true,50);
答案 2 :(得分:0)
查看Cache :: Memcached的_hashfunc(),它使用密钥作为唯一参数。
sub _hashfunc {
return (crc32($_[0]) >> 16) & 0x7fff;
}