PHP简单实现Memcache或者Redis一致性Hash分布式集群算法

<?php
/*
PHP简单实现Memcache或者Redis一致性Hash分布式集群算法
*/
class Consistent{
protected $position = array();
protected $server;

// 统一的Hash算法
public function hash( $str){
return sprintf( "%u", crc32( $str));
}

// 计算$key分布到哪台服务器上
public function lookUp( $key){
foreach( $this-> position as $k=> $v){
if( $this-> hash( $key)<= $k){
$this-> server = $v;
break;
}
}
return $this-> server;
}

// 添加节点
public function addServer( $server){
if(! isset( $this-> position[ $this-> hash( $server)])){
$this-> position[ $this-> hash( $server)] = $server;
}
$this-> sortPosition();
}

// 按顺时针方向成环
private function sortPosition(){
ksort( $this-> position);
}

// 打印节点,调试用
public function print(){
foreach( $this-> position as $k=> $v){
echo $k. " => ". $v.PHP_EOL;
}
}

}

$c = new Consistent();

$c-> addServer( "192.168.1.1");
$c-> addServer( "192.168.1.2");
$c-> addServer( "192.168.1.3");
$c-> addServer( "192.168.1.4");
$c-> addServer( "192.168.1.5");
$c-> addServer( "192.168.1.6");

for( $i= 0; $i< 20; $i++){
echo "user:". $i. " => ". $c-> lookUp( "user:". $i) . PHP_EOL;
}

猜你喜欢

转载自blog.csdn.net/flyfreelyit/article/details/80341505
今日推荐