Redis集群是16384个槽的原因

67次阅读
没有评论

共计 1005 个字符,预计需要花费 3 分钟才能阅读完成。

自动写代码机器人,免费开通

Redis 集群是 16384 个槽的原因?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是丸趣 TV 小编给大家带来的参考内容,让我们一起来看看吧!

Redis 集群并没有使用一致性 hash,而是引入了哈希槽的概念。Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。但为什么哈希槽的数量是 16384(2^14)个呢,这个问题在 github 上有人提过,作者也给出了解答,下面我们来简单分析一下。

为什么是 16384(2^14)个?

在 redis 节点发送心跳包时需要把所有的槽放到这个心跳包里,以便让节点知道当前集群信息,16384=16k,在发送心跳包时使用 bitmap 压缩后是 2k(2 * 8 (8 bit) * 1024(1k) = 2K),也就是说使用 2k 的空间创建了 16k 的槽数。

虽然使用 CRC16 算法最多可以分配 65535(2^16-1)个槽位,65535=65k,压缩后就是 8k(8 * 8 (8 bit) * 1024(1k) = 8K),也就是说需要需要 8k 的心跳包,作者认为这样做不太值得;并且一般情况下一个 redis 集群不会有超过 1000 个 master 节点,所以 16k 的槽位是个比较合适的选择。

作者原话:

1、普通心跳数据包携带节点的完整配置,该配置可以用旧配置以幂等方式替换,以便更新旧配置。这意味着它们包含原始形式的节点的槽配置,16k 的槽配置需要使用 2k 内存空间,但是使用 65k 槽将使用 8k 的内存空间。

2、同时,由于其他设计折衷,Redis 集群不可能扩展到超过 1000 个节点。

因此,16k 是比较合适的,可以确保每个主设备有足够的槽,最大为 1000 个。redis 的 node 配置信息通过位图存储传输的,传输前有一个压缩过程,压缩比跟槽个数和节点数有很大关系(because when N is small the bitmap would have slots/N bits set that is a large percentage of bits set.)【槽数量/节点数】当这个 N 越大,压缩比就越小。

感谢各位的阅读!看完上述内容,你们对 Redis 集群是 16384 个槽的原因大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注丸趣 TV 行业资讯频道。

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计1005字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)