分布式memcache(取模计算)

<?Php
 #分布式memcache(取模计算)
 class GetModMemcache
 {
     private $total='';          #存储memcache服务器的总数
     private $servers=array();   #存储memcache服务器的具体信息
     /**
         * @desc 构造函数
         *
        * @param $serversArr array | memcache服务器具体信息
      */
     public function __construct($serversArr)
     {
         $this->total=count($serversArr);
         $this->servers=$serversArr;

     }

     /**
         * @desc 计算$key的存储位置(即哪个服务器)
         *
         * @param string | key字符串
         *
         * @return int  返回第几个服务器
         */
     protected function position($key)
     {
                 #使用crc32(),将字符串转化为32为的数字
     echo     sprintf('%u',crc32($key))%$this->total;      #取余29
    return sprintf('%u',crc32($key))%$this->total;      #取余29
      }

     /**
             * @desc 获取memcached对象
             *
             * @param $position int | key的位置信息
             *
             * @return object 返回实例化memcached对象
             */
     protected function getMemcached($position)
     {
         $host=$this->servers[$position]['host'];    #服务器池中某台服务器host
         $port=$this->servers[$position]['port'];    #服务器池中某台服务器port
         $m= new memcache();
         $m->addserver($host, $port);
         return $m;
     }

         /**
             * @desc 设置key-value值
             *
             * @param string | key字符串
             * @param mixed  | 值可以是任何有效的非资源型php类型
             *
             * @return 返回结果
             */
     public function setKey($key, $value)
     {
         $num=$this->position($key);
         $m=$this->getMemcached($num);   #获取memcached对象
         return $m->set($key, $value);
     }

     public function getKey($key)
     {
         $num=$this->position($key);
         $m=$this->getMemcached($num);
         return $m->get($key);
     }


 }


 $arr=array(
     array('host'=>'192.168.1.23', 'port'=>'11213'),
     array('host'=>'127.0.0.1', 'port'=>'11211'),
     array('host'=>'192.168.1.195', 'port'=>'11212'),
     );
 $mod=new GetModMemcache($arr);


 #存储数据
//$a=$mod->setKey('wang', 'ding',60);
$a=$mod->setKey('xxxx', 'ssssss11111111111111111111111',60);
// echo "<pre>";
// print_r($a);
//
// echo "</pre>";die;


 #获取数据
// $c=$mod->getKey('chen');
// echo "<pre>";
// print_r($c);
// echo "</pre>";die;

 ?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值