php之普通hash分布式算法

php之普通hash分布式算法


<?php
/*
 * 普通hash分布式算法
 * @param $key
 * @return int
 */
class Hash{
    protected $_serverList = array();
    public function __construct($_serverList){
        if(is_array($_serverList)){
            $this->_serverList = $_serverList;
        }else{
            return false;
        }
    }
    //通过hash算法返回一个整数值
    protected function myHash($key){
        $md5 = substr(md5($key),0,8);
        $seed = 31; //种子值
        $hash=0;
        for($i=0;$i<8;$i++){
            $hash = $hash*$seed+ord($md5{$i}); //ord 返回ascii值
            $i++;
        }
        return $hash&0x7FFFFFFF; //0x7FFFFFFF表示最大值
    }
    public function getServer($key){
        $servers = $this->_serverList;
        $rs = $servers[$this->myHash($key)%(count($servers))];
        return $rs;
    }
}
$servers = array(
    array('host'=>'192.168.1.1','port'=>6397),
    array('host'=>'192.168.1.2','port'=>6397),
    array('host'=>'192.168.1.3','port'=>6397),
    array('host'=>'192.168.1.4','port'=>6397),
    array('host'=>'192.168.1.5','port'=>6397),
    array('host'=>'192.168.1.6','port'=>6397),
    array('host'=>'192.168.1.7','port'=>6397),
);
$key = 'TheKey'.rand(0,99999);
$value = 'TheValue';
$hash = new Hash($servers);
if($hash){
    $server = $hash->getServer($key);
   // $memcached = new Memcached($sc);
   // $memcached->set($key,$value);
}
?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值