一致性hash
2010年8月1日
没有评论
function consistent_hash_key($key,$servers){ if(empty($servers)){ return false; } $hash_serv = array(); $hash_key = sprintf("%u\n",crc32($key)); foreach ($servers as $server){ $hash_serv[sprintf("%u",crc32($server))] = $server; } ksort($hash_serv,SORT_REGULAR); if(count($hash_serv) == 1){ return array_pop($hash_serv); } $maxHash = pow(2,32); foreach ($hash_serv as $k => $v){ if($hash_key < $k){ return $v; } } return array_shift($hash_serv); } for ($i=0;$i<100;$i++){ echo consistent_hash_key('s:'.$i,array('a','b','c','d','e'))."\t"; echo consistent_hash_key('s:'.$i,array('a','b','c','d','e','f'))."\n"; }