Redis 集羣中內置了 16384 個哈希槽,當需要在 Redis 集羣中放置一個 key-value
時,redis 先對 key 使用 crc16 算法算出一個結果,然後把結果對 16384 求餘數,
這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大
致均等的將哈希槽映射到不同的節點。
Redis 集羣沒有使用一致性hash, 而是引入了哈希槽的概念。
Redis 集羣有16384個哈希槽,每個key通過CRC16校驗後對16384取模來決定放置哪個槽.集羣的每個節點負責一部分hash槽。這種結構很容易添加或者刪除節點,並且無論是添加刪除或者修改某一個節點,都不會造成集羣不可用的狀態。
使用哈希槽的好處就在於可以方便的添加或移除節點。
當需要增加節點時,只需要把其他節點的某些哈希槽挪到新節點就可以了;
當需要移除節點時,只需要把移除節點上的哈希槽挪到其他節點就行了;
在這一點上,我們以後新增或移除節點的時候不用先停掉所有的 redis 服務。