26 redis中預設有多少個雜湊槽?

2022-03-17 07:27:48 字數 1144 閱讀 3694

redis 集群中內建了16384個雜湊槽,當需要在 redis 集群中放置乙個 key-value

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

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

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

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

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

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

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

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

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

"用了雜湊槽的概念,而沒有用一致性雜湊演算法,不都是雜湊麼?這樣做的原因是為什麼呢?"

redis cluster是自己做的crc16的簡單hash演算法,沒有用一致性hash。redis的作者認為它的crc16(key) mod 16384的效果已經不錯了,雖然沒有一致性hash靈活,但實現很簡單,節點增刪時處理起來也很方便。

"為了動態增刪節點的時候,不至於丟失資料麼?"

節點增刪時不丟失資料和hash演算法沒什麼關係,不丟失資料要求的是乙份資料有多個副本。

「還有集群總共有2的14次方,16384個雜湊槽,那麼每乙個雜湊槽中存的key 和 value是什麼?」

當你往redis cluster中加入乙個key時,會根據crc16(key) mod 16384計算這個key應該分布到哪個hash slot中,乙個hash slot中會有很多key和value。你可以理解成表的分割槽,使用單節點時的redis時只有乙個表,所有的key都放在這個表裡;改用redis cluster以後會自動為你生成16384個分割槽表,你insert資料時會根據上面的簡單演算法來決定你的key應該存在哪個分割槽,每個分割槽裡有很多key。

求N 中末尾有多少個0

分析 對n進行質因數分解 n 2 x 3 y 5 z.由於10 2 5,所以末尾0的個數只和x與z有關,每一對2和5相乘可以得到乙個10,於是末尾0的個數 min x,z 在實際中x是遠遠大於z的,所以我們只要求出z的值即可。根據公式 z n 5 n 5 2 n 5 3 n 5 k 這表明,5的倍數...

n的階乘結果中末尾有多少個零?

題目 n的階乘中一共有多少個零?解答 產生零的結果只能有一種可能性那就是2 5 10,然而n的階乘本質上是可以拆解為很多2和5以及其他不包含2和5的乘數的積,例如5的階乘 1 2 3 4 5 1 2 3 2 2 5。按照這個思路,將n的階乘乘積的每一項進行拆解,看看可以拆解出多少個2和多少個5,然後...

N的階乘 N 中的末尾有多少個0

問題 n的階乘 n 中的末尾有多少個0?例如 n 5,n 120.末尾有1個0.分析 想到這個問題,有人可能第一反應就是現求出n 然後再根據求出的結果,最後得出n 的末尾有多少個0。但是轉念一想,會不會溢位,等等。其實,從 那些數相乘可以得到10 這個角度,問題就變得比較的簡單了。首先考慮,如果n的...