Redis 哈希槽(hash slot)

概念

在Redis集群中没有采用一致性hash算法,而是采用更为简单的哈希槽(hash slot)的方式映射key和节点的关系,它实现了对数据的分片存储,解决了Redis在线扩容的问题。

在Redis Cluster集群模式中被划分为16384个槽位,每个节点负责其中一部分槽位slot,客户端查找某个key是根据槽位信息表,定位到目标节点。

槽位信息算法会对key值使用CRC16算法hash得到一个整数值,然后再对16384进行取模得到具体的槽位,Cluster集群模式中,用户可以自定义挂载到某个特定的slot的槽位上。

计算公式

hash slot=CRC16(key)%16384 。

哈希槽(hash slot)的优点

新增节点时,把其它的节点部分哈希槽(hash slot)移动到新的节点即可。

删除节点时,把要删除节点的哈希槽(hash slot)移动到其它的节点即可。

比如已有节点abc,

新增节点d,只需要将abc的部分哈希槽(hash slot)移动到d节点即可。

删除节点a,只需要将a的部分哈希槽(hash slot)移动到bc即可。

为什么不用一致性hash

因为作者认为CRC16新增节点,删除新增节点更佳容易。

扩容或者删除节点如何保证数据不丢失

1. 做好redis备份

2. 修改参数min-slaves-to-write=1 min-slaves-max-lag=10。