<?php
// 一致性哈希算法
class ConsistentHashing
{
protected $nodes = [];
protected $position = [];
protected $mul = 64; // 每個節(jié)點對應64個虛擬節(jié)點
/**
* 把字符串轉(zhuǎn)為32位符號整數(shù)
*/
public function hash($str)
{
return sprintf('%u', crc32($str));
}
/**
* 核心功能
*/
public function lookup($key)
{
$point = $this->hash($key);
//先取圓環(huán)上最小的一個節(jié)點,當成結(jié)果
$node = current($this->position);
// 循環(huán)獲取相近的節(jié)點
foreach ($this->position as $key => $val) {
if ($point <= $key) {
$node = $val;
break;
}
}
reset($this->position);
return $node;
}
/**
* 添加節(jié)點
*/
public function addNode($node)
{
if(isset($this->nodes[$node])) return;
// 添加節(jié)點和虛擬節(jié)點
for ($i = 0; $i < $this->mul; $i++) {
$pos = $this->hash($node . '-' . $i);
$this->position[$pos] = $node;
$this->nodes[$node][] = $pos;
}
// 重新排序
$this->sortPos();
}
/**
* 刪除節(jié)點
*/
public function delNode($node)
{
if (!isset($this->nodes[$node])) return;
// 循環(huán)刪除虛擬節(jié)點
foreach ($this->nodes[$node] as $val) {
unset($this->position[$val]);
}
// 刪除節(jié)點
unset($this->nodes[$node]);
}
/**
* 排序
*/
public function sortPos()
{
ksort($this->position, SORT_REGULAR);
}
}
// 測試
$con = new ConsistentHashing();
$con->addNode('a');
$con->addNode('b');
$con->addNode('c');
$con->addNode('d');
$key1 = 'www.zhihu.com';
$key2 = 'www.baidu.com';
$key3 = 'www.google.com';
echo 'key' . $key1 . '落在' . $con->lookup($key1) . '號節(jié)點上浑测!<br>';
echo 'key' . $key2 . '落在' . $con->lookup($key2) . '號節(jié)點上吆玖!<br>';
echo 'key' . $key3 . '落在' . $con->lookup($key3) . '號節(jié)點上度气!<br>';
Memcached 一致性哈希算法PHP實現(xiàn)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門抡草,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饰及,“玉大人,你說我怎么就攤上這事渠牲⌒矗” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵签杈,是天一觀的道長瘫镇。 經(jīng)常有香客問我,道長答姥,這世上最難降的妖魔是什么铣除? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮鹦付,結(jié)果婚禮上尚粘,老公的妹妹穿的比我還像新娘。我一直安慰自己敲长,他們只是感情好郎嫁,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祈噪,像睡著了一般泽铛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辑鲤,一...
- 文/蒼蘭香墨 我猛地睜開眼栓票,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盐杂?” 一聲冷哼從身側(cè)響起逗载,我...
- 正文 年R本政府宣布究飞,位于F島的核電站置谦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏亿傅。R本人自食惡果不足惜媒峡,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葵擎。 院中可真熱鬧谅阿,春花似錦、人聲如沸酬滤。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽盯串。三九已至贱田,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘴脾,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 原文 有關一致性哈希算法原理及其應用討論的文章已經(jīng)足夠多竿刁,如果對一致性哈希算法一點概念都沒有的同學可以先參考這篇文...
- 一致性哈希算法在1997年由麻省理工學院提出的一種分布式哈希(DHT)實現(xiàn)算法,設計目標是為了解決因特網(wǎng)中的熱點(...
- 網(wǎng)站源代碼本地調(diào)試副编,需要搭建運行環(huán)境负甸,有兩款小工具個人覺得很好用! PHP網(wǎng)站本地調(diào)試環(huán)境 WAMPserver2...