1. 程式人生 > >memcache通過hash取模演算法,實現多伺服器存取值

memcache通過hash取模演算法,實現多伺服器存取值

<?php
//封裝一個hash演算法類
class Mem{
    //儲存memcache的伺服器個數
    private $hostCount='';
    //多個伺服器
    private $host=[];

    //構造方法用來給接收值,給屬性賦值
    public function __construct($hostServer)
    {
        $this->hostCount = count($hostServer);
        $this->host = $hostServer;
    }

    //計算key的位置,返回的是當前是第幾臺伺服器
public function position($key){ echo sprintf('%u',crc32($key))%$this->hostCount;//取餘數 return sprintf('%u',crc32($key))%$this->hostCount; } //根據取到的位置獲取當前memcache物件,連結memcache public function getMemObj($position){ //在伺服器池中獲取某一臺的地址和埠號 $host=$this->host[$position
]['host']; $port=$this->host[$position]['port']; $MemObj = new Memcache(); $MemObj->addServer($host,$port); return $MemObj; } //設定值 public function SetData($key,$value){ //找到伺服器位置 $num = $this->position($key); //連線伺服器 $m
= $this->getMemObj($num); return $m->set($key,$value); } public function GetData($key){ //找到伺服器位置 $num = $this->position($key); //連線伺服器 $m = $this->getMemObj($num); return $m->get($key); } } $host = [ [ 'host'=>'127.0.0.1', 'port'=>'11211' ], [ 'host'=>'127.0.0.2', 'port'=>'11212' ] ]; $obj = new Mem($host); $obj->position('sex');