redis cluster和hash slot

数据库63

redis cluster介绍

从redis3.0.0开始,官方支持了redis cluster的集群模式,结束了redis没有集群的时代。

redis cluster 支撑 N 个 redis master node,每个 master node 都可以挂载多个 slave node。这样整个 redis 就可以横向扩容了。如果你要支撑更大数据量的缓存,那就横向扩容更多的 master 节点,每个 master 节点就能存放更多的数据了。

redis cluster实现(hash slot算法)

Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做 哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用 CRC16算法来取模得到所属的 slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是: CRC16(key) % 16384

(为什么是16384,选取了16384是因为crc16会输出16bit的结果,可以看作是一个分布在0-2^16-1之间的数,redis的作者测试发现这个数对2^14求模的会将key在0-2^14-1之间分布得很均匀,因此选了这个值。)

在构建redis cluster集群时,master必须大于等于3,否则会创建失败。并且,当集群中存活的master节点数小于总节点数的一半的话,集群就无法提供服务了。

例:我们有三个master节点A、B、C,采用 哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:

```
节点A:0 ~ 5460
节点B:5461 ~ 10922
节点C:10923 ~ 16383

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长