首頁 >資料庫 >Redis >redis有幾個槽

redis有幾個槽

anonymity
anonymity原創
2019-06-05 10:42:463693瀏覽

Redis 集群中內建了16384 個哈希槽,當需要在Redis 集群中放置一個key-value時,redis 先對key 使用crc16 演算法算出一個結果,然後把結果對16384 求餘數,這樣每個key 都會對應一個編號在0-16383 之間的哈希槽,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點。 Redis 集群沒有使用一致性hash, 而是引入了哈希槽的概念。

redis有幾個槽

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

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

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

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

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

在redis中,把一個key-value鍵值對放入的最簡單的方式就是set key value,如下所示:

127.0.0.1:7000> set key value
-> Redirected to slot [12539] located at 192.168.39.153:7002
OK
192.168.39.153:7002> get key
"value"
192.168.39.153:7002>

可以看出,當我們把key的值設定變成value的時候,客戶端被重定向到了另一個節點192.168.39.153:7002,這是因為key對應的槽位是12359,所以我們的key-value就被放到了槽12359對應的節點,192.168.39.153:7002了。

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

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

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

以上是redis有幾個槽的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn