日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

memcached 分布式 一致性hash算法demo

發布時間:2025/7/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 memcached 分布式 一致性hash算法demo 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一致性Hash分布算法分4個步驟:
步驟1:將一個32位整數[0 ~ (2^32-1)]想象成一個環,0 作為開頭,(2^32-1) 作為結尾,當然這只是想象。
步驟2:通過Hash函數把KEY處理成整數。這樣就可以在環上找到一個位置與之對應。
步驟3:把Memcached服務器群映射到環上,使用Hash函數處理服務器對應的IP地址即可。
步驟4:把數據映射到Memcached服務器上。查找一個KEY對應的Memcached服務器位置的方法如下:從當前KEY的位置,沿著圓環順時針方向出發,查找位置離得最近的一臺Memcached服務器,并將KEY對應的數據保存在此服務器上。

?

代碼實例:

<?php /*** 一致性Hash分布* 天涯PHP博客* http://blog.phpha.com*/ class FlexiHash{//服務器列表private $serverList = array();//記錄是否已經排序private $isSorted = FALSE;//添加一臺服務器public function addServer($server){$hash = $this->mHash($server);if(!isset($this->serverList[$hash])){$this->serverList[$hash] = $server;}//需要重新排序$this->isSorted = FALSE;return TRUE;}//移除一臺服務器public function removeServer($server){$hash = $this->mHash($server);if(isset($this->serverList[$hash])){unset($this->serverList[$hash]);}//需要重新排序$this->isSorted = FALSE;return TRUE;}//在當前服務器列表查找合適的服務器public function lookup($key){$hash = $this->mHash($key);//先進行倒序排序操作if(!$this->isSorted){krsort($this->serverList, SORT_NUMERIC);$this->isSorted = TRUE;}//圓環上順時針方向查找當前KEY緊鄰的一臺服務器foreach($this->serverList as $pos => $server){if($hash >= $pos) return $server;}//沒有找到則返回順時針方向最后一臺服務器return $this->serverList[count($this->serverList) - 1];}//Hash函數private function mHash($key){$md5 = substr(md5($key), 0, 8);$seed = 31;$hash = 0;for($i = 0; $i < 8; $i++){$hash = $hash * $seed + ord($md5{$i});$i++;}return $hash & 0x7FFFFFFF;} } ?>

  

測試:

?

<?php /*** 一致性Hash分布測試代碼* 天涯PHP博客* http://blog.phpha.com*/ $hserver = new FlexiHash(); //初始5臺服務器 $hserver->addServer("192.168.1.1"); $hserver->addServer("192.168.1.2"); $hserver->addServer("192.168.1.3"); $hserver->addServer("192.168.1.4"); $hserver->addServer("192.168.1.5"); echo "save key1 in server: ", $hserver->lookup('key1'), "<br/>"; echo "save key2 in server: ", $hserver->lookup('key2'), "<br/>"; echo '===============================================<br/>'; //移除1臺服務器 $hserver->removeServer("192.168.1.4"); echo "save key1 in server: ", $hserver->lookup('key1'), "<br/>"; echo "save key2 in server: ", $hserver->lookup('key2'), "<br/>"; echo '===============================================<br/>'; //添加1臺服務器 $hserver->addServer('192.168.1.6'); echo "save key1 in server: ", $hserver->lookup('key1'), "<br/>"; echo "save key2 in server: ", $hserver->lookup('key2'); ?>

//測試結果如下: save key1 in server: 192.168.1.4 save key2 in server: 192.168.1.2 ================================== save key1 in server: 192.168.1.3 save key2 in server: 192.168.1.2 ================================== save key1 in server: 192.168.1.3 save key2 in server: 192.168.1.2

  

轉載于:https://www.cnblogs.com/icyy/p/5198998.html

總結

以上是生活随笔為你收集整理的memcached 分布式 一致性hash算法demo的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。