2011-02-15 4 views
5


Je me demande pourquoi il existe un paramètre php.ini memcache.hash_strategy. Le manuel dit:À quoi sert memcache.hash_strategy?

Contrôle la stratégie à utiliser lors du mappage des clés aux serveurs. Définissez cette valeur sur cohérente pour activer le hachage cohérent qui permet d'ajouter ou de supprimer des serveurs du pool sans que les clés soient remappées. La définition de cette valeur sur standard entraîne l'utilisation de l'ancienne stratégie.

Mais le programmeur ne fait-il pas lui-même la clé des serveurs? Voici quelques pseudo-code:

$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'); 

Que dois-je manquer?

+1

Voir http://stackoverflow.com/questions/4717559/multiple-memcached-servers-question sur la façon d'utiliser correctement plusieurs serveurs memcache. – rik

+0

Oh merci rik, maintenant c'est clair! – zapadlo

Répondre

3

Vous utilisez d'anciens exemples. La façon moderne d'utiliser memcache est en tant que tel:

$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'); 

Maintenant, le code memcache va maintenant utiliser sa méthode de hachage pour déterminer le serveur. Vous pouvez utiliser deux options. Un hachage cohérent réduit l'effet de la suppression d'un serveur de la liste. Où le hachage traditionnel est fondamentalement le code que vous avez ci-dessus. Vous pouvez trouver plus à ce sujet à http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients