分布式memcache(取模计算)

来源:互联网 发布:国内旅游租房软件 编辑:程序博客网 时间:2024/05/21 09:28
<?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
原创粉丝点击