memcache通過hash取模演算法,實現多伺服器存取值
阿新 • • 發佈:2018-11-01
<?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');