一致性hash演算法

2021-10-09 11:47:49 字數 658 閱讀 8468

hash演算法取餘這種方式有乙個壞處就是當增加或者減少的節點的時候都會帶來需要重新hash,之前的hash快取之類的都會失效。

之後就提出了一致性hash演算法,就是先構造乙個2的32次方的整數環,根據每次hash值都放在這個hash環上面,根據hash的值查詢距離,放在理伺服器最近的服務節點上面,完成對映。

hash環的實現方式有幾種:

list+排序

這種方式每次只要查詢到大於list中hash值的就可以停止,每次查詢的效率最少是o(1),至多是o(n);所以時間複雜度為o(n)

純list不排序

這種方式的話需要輪詢所有的,然後記錄所有比他大的值;一遍輪詢下來,然後比較其中最小的,時間複雜度為o(n),如果沒有比他大的,那就是需要再輪詢一遍找到最大的,就是o(n)+o(n)。最終複雜度為o(n)

treemap的方式

因為樹的結構,所以它每次查詢的效率為o(logn)的複雜度,最為方便;但是為了維護內部的紅黑樹,所以插入的效率就慢很多了。

這邊我已經實現了相關的**,放在github上了。

一致性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...