1. 程式人生 > 其它 >redis雜湊槽的作用

redis雜湊槽的作用

Redis雜湊槽的作用

目錄

1、記錄來源

利用阿里雲監控平臺,監控介面時看到一個非常慢的介面,點了進去,發現了slot標誌

好奇心促使我想知道redis中slot是做什麼的

2、作用

slot:稱為雜湊槽

Redis 叢集中內建了 16384 個雜湊槽,當需要在 Redis 叢集中放置一個 key-value

時,redis 先對 key 使用 crc16 演算法算出一個結果,然後把結果對 16384 求餘數,

這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大

致均等的將雜湊槽對映到不同的節點。

Redis 叢集沒有使用一致性hash, 而是引入了雜湊槽的概念。

Redis 叢集有16384個雜湊槽,每個key通過CRC16校驗後對16384取模來決定放置哪個槽.叢集的每個節點負責一部分hash槽。這種結構很容易新增或者刪除節點,並且無論是新增刪除或者修改某一個節點,都不會造成叢集不可用的狀態。

使用雜湊槽的好處就在於可以方便的新增或移除節點。

當需要增加節點時,只需要把其他節點的某些雜湊槽挪到新節點就可以了;

當需要移除節點時,只需要把移除節點上的雜湊槽挪到其他節點就行了;

在這一點上,我們以後新增或移除節點的時候不用先停掉所有的 redis 服務。

這裡有個理解誤區,有初學者會想,這個slot是不是儲存資料的點?就是隻能存16383+1個鍵?
實際並不是這樣,這個slot只是對應節點(Redis服務)的一個儲存範圍(可以理解為這個Redis的別名)。
比如,現在有3臺Redis ,分別給他們分配slot :

image.png

現有一個key要insert到Redis,那麼根據 CRC16(key) mod 16384的值,比如得到3000,那就把這個key儲存在A伺服器裡面了。讀的時候也一樣,有個key要去讀,就先 CRC16(key) mod 16384 找到對應的slot,然後就去對應的伺服器找資料。看起來,很像個索引吧。

侵刪!