一致性Hash演算法php實現例項

2021-07-04 04:08:15 字數 1897 閱讀 9882

下面使用php實現一致性hash分布演算法。

建立乙個conhash類,它有兩個成員變數和三個成員方法。

變數: se

rver

list

//儲存

伺服器列

表 issorted //記錄伺服器列表是否已經排過序。

方法:

addserver:新增乙個伺服器到伺服器列表中

removeserver:從伺服器列表中刪除乙個伺服器

lookup:從當前伺服器列表中找到合適的伺服器存放資料。

**如下:

<?php

class conhash

function removeserver($server)

function lookup($key)

}?>

1)addserver方法實現

function addserver($server) 

$this->issorted = false;

return true;

} function removeserver($server)

$this->issorted = false;

return true;

}

3)lookup方法實現

function lookup($key) 

foreach($this->serverlist as $pos =>$server)

}return $this->serverlist[count($this->serverlist)-1];

}

lookup方法首先通過mhash函式計算出key的hash值,然後判斷伺服器列表是否排過序,如果沒有,就先對伺服器列表進行倒序排序操作。倒序排序的作用是把伺服器列表轉換成乙個逆時針的圓環。最後遍歷伺服器列表,找到乙個合適的伺服器返回。

4)測試**

$hserver = new conhash();

$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 "儲存 key1 在 server:",$hserver->lookup('key1');

echo "儲存 key2 在 server:",$hserver->lookup('key2');

echo '***********************************';

$hserver->removeserver("192.168.1.2");

$hserver->removeserver("192.168.1.1");

echo "儲存 key1 在 server:",$hserver->lookup('key1');

echo "儲存 key2 在 server:",$hserver->lookup('key2');

echo '***********************************';

$hserver->addserver("192.168.1.6");

echo "儲存 key1 在 server:",$hserver->lookup('key1');

echo "儲存 key2 在 server:",$hserver->lookup('key2');

測試結果具有隨機性,在不同的機器上,可能出現的結果會有所不同。但這個例子解釋了一致性hash演算法。

一致性hash演算法 面試必備 一致性hash演算法

最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...

一致性hash演算法虛擬節點 一致性hash演算法

hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...

一致性hash演算法

july部落格16章開始 第一題 全排列,輸入乙個字串,列印出該字串中字元的所有排列 1.個人思路 回溯法建立的排序樹 2.july部落格 遞迴實現,依次固定第乙個字母,後面的交換,和上面描述的使用回溯法相似 c stl 演算法 next permutation的思想,關於next permutat...