溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

redis中hash槽有多少個

發(fā)布時間:2020-07-15 09:59:05 來源:億速云 閱讀:132 作者:Leah 欄目:關(guān)系型數(shù)據(jù)庫

redis中hash槽有多少個?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

   Redis 集群中內(nèi)置了 16384 個哈希槽,當(dāng)需要在 Redis 集群中放置一個 key-value時,redis 先對 key 使用 crc16 算法算出一個結(jié)果,然后把結(jié)果對 16384 求余數(shù),這樣每個 key 都會對應(yīng)一個編號在 0-16383 之間的哈希槽,redis 會根據(jù)節(jié)點數(shù)量大致均等的將哈希槽映射到不同的節(jié)點。

Redis 集群沒有使用一致性hash, 而是引入了哈希槽的概念。

Redis 集群有16384個哈希槽,每個key通過CRC16校驗后對16384取模來決定放置哪個槽.集群的每個節(jié)點負(fù)責(zé)一部分hash槽。這種結(jié)構(gòu)很容易添加或者刪除節(jié)點,并且無論是添加刪除或者修改某一個節(jié)點,都不會造成集群不可用的狀態(tài)。

使用哈希槽的好處就在于可以方便的添加或移除節(jié)點。

當(dāng)需要增加節(jié)點時,只需要把其他節(jié)點的某些哈希槽挪到新節(jié)點就可以了;

當(dāng)需要移除節(jié)點時,只需要把移除節(jié)點上的哈希槽挪到其他節(jié)點就行了;

在這一點上,我們以后新增或移除節(jié)點的時候不用先停掉所有的 redis 服務(wù)。

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

Redis Cluster是自己做的crc16的簡單hash算法,沒有用一致性hash。Redis的作者認(rèn)為它的crc16(key) mod 16384的效果已經(jīng)不錯了,雖然沒有一致性hash靈活,但實現(xiàn)很簡單,節(jié)點增刪時處理起來也很方便。

"為了動態(tài)增刪節(jié)點的時候,不至于丟失數(shù)據(jù)么?"

節(jié)點增刪時不丟失數(shù)據(jù)和hash算法沒什么關(guān)系,不丟失數(shù)據(jù)要求的是一份數(shù)據(jù)有多個副本。

“還有集群總共有2的14次方,16384個哈希槽,那么每一個哈希槽中存的key 和 value是什么?”

當(dāng)你往Redis Cluster中加入一個Key時,會根據(jù)crc16(key) mod 16384計算這個key應(yīng)該分布到哪個hash slot中,一個hash slot中會有很多key和value。你可以理解成表的分區(qū),使用單節(jié)點時的redis時只有一個表,所有的key都放在這個表里;改用Redis Cluster以后會自動為你生成16384個分區(qū)表,你insert數(shù)據(jù)時會根據(jù)上面的簡單算法來決定你的key應(yīng)該存在哪個分區(qū),每個分區(qū)里有很多key。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI