news 2026/10/15 17:41:34

Redis Cluster 的 16384 个槽(Slot)是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis Cluster 的 16384 个槽(Slot)是什么?

1. 引言

很多刚接触 Redis Cluster 的同学都会有一个疑问:为什么集群要设计成 16384 个槽(slot),而不是 1000 个、10000 个或者更多?这篇文章就来彻底讲清楚 16384 个槽到底是什么、怎么用,以及为什么偏偏是这个数字。

2. 槽(Slot)是什么

Redis Cluster 并没有使用一致性哈希,而是采用了一种叫做「哈希槽」(hash slot)的机制。

简单来说,整个集群被逻辑上划分为16384 个槽,编号从0到16383。每个键(key)都会通过下面的公式被映射到其中一个槽上:

HASH_SLOT = CRC16(key) % 16384

也就是说,先对 key 做 CRC16 校验,得到一个 16 位的整数,再对 16384 取模,最终得到该 key 所属的槽编号。

3. 槽与节点的关系

槽是数据分布的最小逻辑单元,而节点(master)是真正存储数据的物理单元。

  • 每个 master 节点负责一部分槽;
  • 一个槽只能属于一个 master;
  • 所有槽都被分配完毕后,集群才处于正常状态(cluster_state:ok)。

例如一个 3 主节点的集群,可以这样分配:

节点负责的槽范围
Master A0 – 5460
Master B5461 – 10922
Master C10923 – 16383

当客户端要读写某个 key 时,先算出它的槽编号,再通过集群的「槽 → 节点」映射表,直接定位到对应的 master 节点,从而完成请求。

4. 为什么是 16384

16384 这个数字并不是随便定的,它背后有性能和内存两方面的考量。

4.1 心跳包要尽量小

集群中的每个节点都会通过 Gossip 协议定期广播自己的状态。心跳包中需要携带「本节点负责哪些槽」的位图信息。

如果用 16384 个槽,每个槽只占 1 个 bit,那么完整的槽位图大小就是:

16384 / 8 = 2048 字节 = 2 KB

这个体积非常小,可以轻松放进心跳包里,网络开销很低。

4.2 槽数量不能太少

如果槽数量太少,比如只有 100 个,那么当集群扩容、缩容或做数据迁移时,每个槽里包含的 key 会非常多,导致迁移粒度太粗、数据倾斜明显,很难做到均衡。

4.3 槽数量不能太多

如果槽数量太多,比如 65536 个,虽然迁移粒度更细,但会带来两个问题:

  • 槽位图会变成65536 / 8 = 8 KB,心跳包明显变大,网络开销增加;
  • 节点间同步槽信息、维护映射表的成本也会上升。

所以 16384 是一个在「迁移粒度」和「通信开销」之间取得平衡的经验值。

5. 槽的迁移

当集群需要扩容、缩水或重新平衡时,实际上做的事情就是「槽迁移」。

迁移过程是增量的:把某个槽从源节点迁移到目标节点时,槽内的 key 会一批一批地搬过去,期间集群仍然可以对外提供服务。

CLUSTER SETSLOT <slot> MIGRATING <target_node_id> CLUSTER SETSLOT <slot> IMPORTING <source_node_id>

迁移完成后,槽的归属关系更新,客户端也会通过MOVED或ASK重定向拿到最新的槽映射。

6. 总结

Redis Cluster 的 16384 个槽,本质上是一张把「键空间」均匀切分出来的逻辑地图:

  • 每个 key 通过CRC16(key) % 16384定位到唯一槽;
  • 每个 master 负责一部分槽;
  • 槽的迁移就是集群扩容、缩容和再平衡的核心手段;
  • 16384 这个数字,是官方在迁移粒度、心跳包大小和内存开销之间权衡后的最佳选择。

理解了槽,你就理解了 Redis Cluster 的数据分布与扩缩容原理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 17:40:50

LangChain4j 10 Skills 实战:把本地 Skills 配置改到 TaoToken 统一通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/15 17:40:49

导数的本质:从变化率、局部线性到极限逼近的直观重建

1. 这不是公式默写&#xff0c;是重新理解“变化率”的起点你翻开微积分教材&#xff0c;第一页写着“导数是函数在某一点的瞬时变化率”&#xff0c;接着就是一堆极限符号、Δx趋近于0、斜率定义……然后你开始抄笔记、背公式、刷题。但有没有哪一刻&#xff0c;你盯着yx在x2处…

作者头像 李华
网站建设 2026/10/15 17:40:48

Linux下串口与网口数据转发的工业级实现方案

简介&#xff1a;本资源是一个基于C语言实现的串口与网口双向数据转发工具&#xff0c;面向嵌入式开发、工业通信及网络协议集成领域的中高级工程师与学习者&#xff0c;解决现场设备&#xff08;如PLC、传感器&#xff09;通过串口接入以太网远程监控系统的实际工程问题。压缩…

作者头像 李华
网站建设 2026/10/15 17:40:33

EXBSA结构体提取工具:固件中嵌入式二进制块精准定位与导出

简介&#xff1a;ExBSA提取工具是一款专为BISHOP社GALGAME设计的BSA格式解包软件&#xff0c;面向视觉小说爱好者、MOD制作者及逆向分析初学者&#xff0c;解决游戏资源无法直接访问、剧本与素材难以复用等核心问题。压缩包共6个文件&#xff0c;含3个可执行程序&#xff08;ex…

作者头像 李华
网站建设 2026/10/15 17:39:59

VS2010 MFC嵌入CEF3 90.6.0实现JS与C++双向通信

简介&#xff1a;本资源是一份面向C中高级开发者的VS2010与CEF3深度集成实践项目&#xff0c;聚焦于将Chromium Embedded Framework 90.6.0版本嵌入MFC窗口并实现JS与C双向通信&#xff0c;适用于桌面端混合应用开发、Web UI本地化渲染等典型场景。压缩包共629个文件&#xff0…

作者头像 李华