我想知道为什么有一个memcache.hash_strategy php.ini设置.手册说:
控制将密钥映射到服务器时使用的策略.将此值设置为一致以启用一致性散列,从而允许在池中添加或删除服务器,而不会导致重新映射密钥.将此值设置为标准会导致使用旧策略.
但是,程序员自己不是映射服务器的关键吗?这是一些伪代码:
$memcacheServerList = array('host1', 'host2', 'host3');
$key = 'my_key';
$memcacheServerIndex = crc32($key) % sizeof($memcacheServerList);
$memcache = new Memcache();
$memcache->connect($memcacheServerList[$memcacheServerIndex], 11211);
$memcache->add($key, 'this is value');
Run Code Online (Sandbox Code Playgroud)
$memcacheServerList = array('host1', 'host2', 'host3');
$key = 'my_key';
$memcacheServerIndex = crc32($key) % sizeof($memcacheServerList);
$memcache = new Memcache();
$memcache->connect($memcacheServerList[$memcacheServerIndex], 11211);
$memcache->add($key, 'this is value');
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
小智 3
您正在使用一些旧的示例。使用 memcache 的现代方式是这样的:
$servers = array(
"10.1.1.1",
"10.1.1.2",
"10.1.1.3",
);
$m = new Memcache();
foreach($servers as $server) {
$m->addServer ( $server );
}
$m->add($key, 'this is value');
Run Code Online (Sandbox Code Playgroud)
现在,memcache 代码将使用其哈希方法来确定服务器。您可以使用两个选项。一致的散列将减少从列表中删除服务器的影响。传统的哈希基本上就是上面的代码。您可以在http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients找到更多信息