news 2026/2/26 21:59:07

Redis Cluster 的数据分片机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis Cluster 的数据分片机制

Redis Cluster 的数据分片机制,即基于CRC16 算法16384 个哈希槽(Hash Slot)的分配方法。这是 Redis 分布式架构的核心。


核心思想

Redis Cluster 不使用一致性哈希,而是引入了哈希槽的概念,将整个数据集逻辑上划分为16384(2^14)个槽。每个键通过一个固定的算法计算它属于哪个槽,而每个节点负责管理一部分槽。

这样做的好处是:

  • 解耦数据与节点:数据只与槽编号相关,槽与节点的映射可以动态调整。

  • 易于管理:集群的扩容、缩容、负载均衡,都转化为槽的迁移操作。

  • 计算简单:客户端可以本地计算键的槽位置,直接路由到正确的节点。


键到哈希槽的计算算法

计算分为两步:

1.计算 CRC16 校验和

对键的完整名称(key)进行 CRC16 计算。Redis 使用的 CRC16 多项式是CRC-16-CCITT,即:
X^16 + X^12 + X^5 + 1(初始值 0x0000)。

2.对 16384 取模

slot = CRC16(key) % 16384

结果是一个 0 到 16383 之间的整数,这就是该键的“家”。


键哈希标签(Hash Tags)

为了确保多个相关的键被分配到同一个槽(从而在同一个节点),Redis 支持哈希标签。规则是:

  • 如果键中包含{...}模式,则只对{}之间的子串计算哈希。

  • 否则,对整个键计算。

示例:

# 这两个键会被分配到同一个槽,因为只对 "user123" 计算哈希 SET user:{user123}:profile "Alice" SET user:{user123}:session "abc123" # 计算方式:slot = CRC16("user123") % 16384

槽到节点的映射

集群启动时或经过重配置后,每个主节点会负责一个或多个槽的范围。例如:

  • 节点 A:负责槽 0 - 5500

  • 节点 B:负责槽 5501 - 11000

  • 节点 C:负责槽 11001 - 16383

这个映射关系被称为集群配置,它由所有节点共享。客户端在启动时会获取一份副本,从而可以直接将命令发送到正确的节点。


客户端请求路由

  1. 客户端本地计算槽:客户端根据上述算法计算出键对应的槽号。

  2. 检查本地缓存:客户端查看本地缓存的“槽-节点”映射表。

  3. 发送命令

    • 如果映射正确,直接发送命令到对应节点。

    • 如果映射不正确(例如集群已迁移),目标节点会返回MOVED 错误并附带正确的节点地址,客户端更新映射并重试。

  4. ASK 重定向:在槽迁移过程中,如果请求的键已被迁移到新节点,旧节点会返回ASK 重定向,客户端临时向新节点发送命令。


为什么是 16384 个槽?

作者 Antirez 在 GitHub 讨论 中解释过:

  1. 内存与心跳包大小:集群中每个节点需要定期广播它负责的槽位图(16384 位 = 2KB)。如果槽数太多(如 65536),心跳包会过大(8KB),浪费网络带宽。

  2. 足够的分片:16384 个槽对于最多 ~1000 个节点的集群已经足够,而 Redis Cluster 设计上不建议超过 1000 个节点。

  3. CRC16 分布性:CRC16 输出 65536 个可能值,取模 16384 后冲突率在可接受范围。


槽迁移与重新分片

当需要扩容或缩容时,管理员可以使用redis-cli --cluster reshard命令将槽从一个节点迁移到另一个节点。迁移过程:

  • 标记槽为“迁移中”状态。

  • 迁移槽内的键数据。

  • 更新集群配置,将槽的所有权转移给新节点。

迁移期间,集群仍可正常处理请求(通过 MOVED/ASK 重定向)。


总结表

组件说明
哈希槽总数16384 个固定槽
哈希算法CRC16(key) % 16384
哈希标签{...}确保相关键同槽
槽分配每个主节点负责一部分槽范围
客户端路由本地计算槽,根据缓存映射发送,支持 MOVED/ASK 重定向
重分片槽可以在节点间迁移,支持在线扩容缩容
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/25 22:10:20

提示工程架构师携手Agentic AI,给智能城市来一场大升级

提示工程架构师携手Agentic AI:给智能城市来一场“认知革命”级升级 引言:智能城市的“瓶颈期”与破局点 清晨7点半,你开车经过市中心路口——红绿灯还在按固定时长切换,东向车道已经排起长队,北向却空无一人;与此同时,3公里外的园区PM2.5突然飙升,但环保监测系统还在…

作者头像 李华
网站建设 2026/2/20 14:32:15

计算机Java毕设实战-基于springboot的猫猫主题宠物咖啡平台管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/2/14 2:36:25

【笔记】【货币战争】

目录 精读《货币战争》:一场围绕货币发行权的无硝烟财富争夺战 二、运作真相:美国政府向私人银行借钱花 三、私有本质:谁在真正掌控美联储? 二、1929 大萧条:精心设计的剪羊毛行动 三、危机的本质:债务货币的潮汐效应 二、国际清算银行:中央银行家的暗箱操作平台 …

作者头像 李华
网站建设 2026/2/25 10:59:16

【笔记】【底层逻辑1】

目录 精读刘润《底层逻辑 1》:看透世界运转规律,少走人生弯路 一、 是非对错的底层逻辑:三种视角,三种答案 二、 分清人性、道德和法律:别混淆三者的边界 三、 人生的三层智慧:选择、定力、博弈 第一层智慧:选择 —— 先知道 “有的选”,再敢放弃 第二层智慧:定…

作者头像 李华
网站建设 2026/2/25 4:57:34

Node.js 用 process.cpuUsage 监控CPU使用率

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Node.js CPU监控的深度实践:超越process.cpuUsage的陷阱与创新目录Node.js CPU监控的深度实践:超越proce…

作者头像 李华
网站建设 2026/2/26 17:55:09

【课程设计/毕业设计】基于JavaWeb寝室管理系统Web的学生宿舍管理系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华