什么是memcache.hash_strategy?

zap*_*dlo 5 php memcached


我想知道为什么有一个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找到更多信息