Redis集群中slot的个数为什么是16384个

  • 之前在使用Redis集群的时候,发现集群的slot的个数是16384个,对这个数字比较好奇,查了一些资料,这里记录下基于资料我自己的理解。

  • 查了一下,github里redis项目的issue里专门有对这个问题的解答,传送门
    在这里插入图片描述

  • 这里记录下我自己的理解。

    • Redis集群中,计算key位于哪个slot时,会先用crc16(key)函数计算key的哈希值,然后再用哈希值对216取模,取模结果有216 -1=65535个余值,可能很多人会有疑问, slot的个数为什么不是65536?这里主要是有两方面的考虑:
    • redis集群中各节点间会定时通过心跳发送消息,以让其他节点知道当前节点存活,并且利用Gossip协议交换节点间的信息;心跳消息中包含一个节点的完整配置信息,包括slot bitmap的信息。如果是16384个slot,占的空间为16384个位,即16384/8=2048=2KB空间。而如果是65536个slot,即65536位,占用空间为65536/8=8KB;16384个slot占用的空间更少;
    • 由于其他的设计权衡,redis集群中master节点数基本上不超过1000个;在最大集群规模下,slot均匀分配的情况下,每个节点平均分到的slot不至于太少。
    • 基于以上两点,对于最多1000个主节点的redis集群,16384个slot在合理的范围内;但是呢,更少的slot bitmap在节点间传播slot配置信息的时候更快。
  • 简单来说,16384个slot占用空间更少;对于最多1000个master的redis集群来说,也完全够用。所以规定为16384个slot,而不是65536个。

欢迎走过路过的各位大佬关注我的微信公众号ItBeeCoder

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值