制作memcache 简单的 hash 调度器

本文介绍了一个用于管理Memcache集群的PHP类实现。该类能够根据键名选择合适的服务器进行连接,并提供添加和获取数据的方法。通过CRC32算法确定数据存储位置,实现了负载均衡。
<?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);



?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值