Redis集群模式!
Redis集群模式!
月伴飞鱼
Redis 3.0之前,使用 哨兵(Sentinel)机制来监控各个节点之间的状态。在
3.0版本正式推出,解决了Redis在 分布式 方面的需求。
数据分区
Redis Cluster采用 虚拟槽分区,所有的 键 根据 哈希函数 映射到0~16383整数槽内。
- 计算公式:
slot = CRC16(key)& 16383。- 每个节点负责维护一部分槽以及槽所映射的 键值数据。
为什么Redis集群的最大槽数是16384个?
2^14^=16384、2^16^=65536。
如果槽位是65536个,发送心跳信息的消息头是
65536/8/1024 = 8k。如果槽位是16384个,发送心跳信息的消息头是
16384/8/1024 = 2k。因为Redis每秒都会发送一定数量的心跳包,如果消息头是8k,有些太大了,浪费网络资源。
Redis的集群主节点数量一般不会超过1000个。
- 集群中节点越多,心跳包的消息体内的数据就越多,如果节点过多,也会造成网络拥堵。
因此Redis的作者不建议Redis Cluster的节点超过1000个,对于节点数在1000个以内的Redis Cluster,16384个槽位完全够用。
集群的功能限制
key批量操作 支持有限:
- 类似
mset、mget操作,目前只支持对具有相同slot值的key执行 批量操作。- 对于 映射为不同
slot值的key由于执行mget、mget等操作可能存在于多个节点上,因此不被支持。
key事务操作 支持有限:
- 只支持 多
key在 同一节点上 的 事务操作,当多个key分布在 不同 的节点上时 无法 使用事务功能。不支持 多数据库空间:
- 单机 下的
Redis可以支持16个数据库(db0 ~ db15),集群模式 下只能使用 一个 数据库空间,即db0。














