共计 991 个字符,预计需要花费 3 分钟才能阅读完成。
自动写代码机器人,免费开通
为什么 redis 集群的最大槽数是 16384 个?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Redis 集群并没有使用一致性 hash,而是引入了哈希槽的概念。
Redis 集群有 16384(2^14)个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。
这种结构很容易添加或者删除节点,并且无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态。
HASH_SLOT = CRC16(客户端 key) mod 16384
CRC16 算法产生的 hash 值有 16bit, 可以产生的值在 0~65535 之间。
在 redis 节点发送心跳包时需要把所有的槽放到这个心跳包里,以便让节点知道当前集群信息,16384=16k,在发送心跳包时使用 char 进行 bitmap 压缩后是 2k(2 * 8 (8 bit) * 1024(1k) = 2K),也就是说使用 2k 的空间创建了 16k 的槽数。
65535=65k,压缩后就是 8k(8 * 8 (8 bit) * 1024(1k) = 8K),也就是说需要需要 8k 的心跳包。
Redis Cluster 原理
1.node1 和 node2 首先进行握手 meet,知道彼此的存在
2. 握手成功后,两个节点会定期发送 ping/pong 消息,交换数据信息 (消息头,消息体)
3. 消息头里面有个字段:unsigned char myslots[CLUSTER_SLOTS/8],每一位代表一个槽,如果该位是 1,代表该槽属于这个节点
4. 消息体中会携带一定数量的其他节点的信息,大约占集群节点总数量的十分之一,至少是 3 个节点的信息。节点数量越多,消息体内容越大。
5. 每秒都在发送 ping 消息。每秒随机选取 5 个节点,找出最久没有通信的节点发送 ping 消息。
6. 每 100 毫秒都会扫描本地节点列表,如果发现节点最近一次接受 pong 消息的时间大于 cluster-node-timeout/2, 则立即发送 ping 消息 redis 集群的主节点数量基本不可能超过 1000 个,超过的话可能会导致网络拥堵。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。
向 AI 问一下细节
丸趣 TV 网 – 提供最优质的资源集合!