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