redis一致性hash算法理解


一般算法:

  對對象先hash然后對redis數量取模,如果結果是0就存在0的節點上。

  1、2同上,假設有0-3四個redis節點、20個數據:

  

進行取模后分布如下:

現在因為壓力過大需要擴容,增加一台redis4、第五個節點:

現在只有4個節點還能夠命中。命中率是:4/20 = 20%,命中率極其低下。(redis肯定是不會這樣用的)

二、redis使用的consistent hashing(一致性hash算法)

  1、環形hash空間:

把對象映射到0-2的32次冪減1的空間里。

現在假設有4個對象:object1-object4,將四個對象hash后映射到環形空間中:

接下來把chche映射到hash空間(基本思想就是講對象和cache都映射到同一hash數值空間中,並且使用相同的hash算法,可以使用cache的ip地址或者其他因子),假設現在有三個cache:

每個key順時針往下走,找到的第一個cache節點就是存儲位置:

現在移除一個cacheB節點、這時候key4將找不到cache,key4繼續使用一致性hash算法運算后算出最新的cacheC,以后存儲與讀取都將在cacheC上:

移除節點后的影響范圍在該節點逆時針計算到遇到的第一個cache節點之間的數據節點。

現在看一下增加一個節點:

影響范圍為:添加節點逆時針遇到的第一個cache節點之間的數據節點。(未完待續)

文中圖為慕課網geely老師的電商平台課程視頻中的圖,知識點很多,講的非常好,課程鏈接

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM