您的当前位置:首页正文

制作memcache 简单的 hash 调度器

2024-11-12 来源:个人技术集锦
<?php
$name = '11 abc cdd beb bbb';

/*
$mem =  new Memcache();
$mem->connect('127.0.0.1',11211);

$res = $mem->add('name',$name,0,time()+30*24*3600);
var_dump($res);

$val = $mem->get('name');

var_dump($val);
*/

class memControl
{
    private $server = array();                //设置服务器 以 数组的形式  ,即多个服务器
    public $error = null;                     //返回值错误提示
    private $memObj;                          //memcache 对象
    public $serial;                            // 服务器编号

    public function __construct($server)
    {
        $this->server = $server;               // 服务器
        $this->memObj = new Memcache();        // 实例化对象 赋值 给 $memObj
    }

    public function choiceService($key)        //选择服务器 方法
    {
        $num = sprintf("%u",crc32($key));       // sprintf() 返回一个格式化字符串
                                                 //crc32()计算一个字符串的 crc32 多项式
                                                 //由于 PHP 的整数是带符号的,许多 crc32 校验码将返回负整数,
                                                 //因此你需要使用 sprintf() 或 printf() 的“%u”格式符来获取表示无符号 crc32 校验码的字符串。
        return $num % count($this->server);    // 根据  取MO  算法 算出是第 几台机器
    }
/*********  链接 ***********/
    public function connect($key)
    {
        $this->serial = $serial = $this->choiceService($key);
        $bool = $this->memObj->connect($this->server[$serial]['host'],$this->server[$serial]['port']);
        if($bool)
        {
            return true;
        }
        else
        {
            $this->error = 'Connect Memcache Fail';
            return false;
        }
    }

    public function add($key,$val,$expire=0)
    {

        $bool = $this->connect($key);
        if($bool)
        {
            return $this->memObj->add($key,$val,$expire);
        }
        else
        {
            return false;
        }
    }

    public function get($key)
    {
        $bool = $this->connect($key);

        if($bool)
        {
            return $this->memObj->get($key);
        }
        else
        {
            return false;
        }
    }
}

$server = array(
    array('host'=>'127.0.0.1','port'=>11211),
    array('host'=>'127.0.0.1','port'=>11212),
    array('host'=>'127.0.0.1','port'=>11213),
);
$memObj = new memControl($server);
$memObj->add('name',$name);
$val = $memObj->get('name');
echo '<pre>';
print_r($memObj);
print_r($val);



?>
Top