Redis Cluster为什么设定成16834个槽位

作者设定为16384的原因:

Redis Cluster为什么设定成16834个槽位

Redis Cluster中的节点,需要发送ping消息作为心跳包,心跳包的消息中会包括节点的槽位信息,按Redis消息头的设定,槽位信息的数组大小16384/8,最终槽位信息会转为bitmap(1Byte=8bit)存储,对于心跳信息的消息头需占用2K的空间,若槽位为65536,发送的心跳信息的消息头达到8K,对于数百个节点的集群,需要消耗很大的带宽。

Redis Cluster为什么设定成16834个槽位

                                                  bitmap示例

 

那么Redis Cluster的节点,是在什么样的频率下会发起ping消息?

1. 每秒会随机选取5个节点,寻找最久没有通信的节点发送ping消息;

2. 每100毫秒(1秒10次)都会扫描本地节点列表,寻找节点最近一次接受pong消息的时间大于cluster-node-timeout/2 ,则立刻发送ping消息。

对于节点越多的集群,其消耗的带宽越大,因此官方建议最大主节点数不超过1000个。