Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • 数据库概述
  • MySQL

  • Redis

    • Redis概述
    • Redis版本
    • Redis相较于其他NoSQL数据库
    • Redis安装配置与客户端
    • Redis数据类型
    • String Bitmap Bitfield
    • Hash List Set ZSet
    • Stream与消息队列
    • Redis内部编码
    • Redis命令
    • 过期删除与内存淘汰
    • 内存管理与对象模型
    • 单线程模型与IO多路复用
    • 事件循环与网络模型
    • Redis持久化机制
    • RDB与AOF实践
    • 复制原理与主从同步
    • Sentinel哨兵机制
    • Redis Cluster集群
      • 1. 学习定位
      • 2. 核心地图
      • 3. 小章节深度讲解
        • 3.1. hash slot
        • 是什么
        • 开发人员怎么用
        • 运维人员怎么看
        • 常见风险
        • 3.2. MOVED
        • 是什么
        • 开发人员怎么用
        • 运维人员怎么看
        • 常见风险
        • 3.3. ASK
        • 是什么
        • 开发人员怎么用
        • 运维人员怎么看
        • 常见风险
        • 3.4. 主从分片
        • 是什么
        • 开发人员怎么用
        • 运维人员怎么看
        • 常见风险
        • 3.5. 故障转移
        • 是什么
        • 开发人员怎么用
        • 运维人员怎么看
        • 常见风险
        • 3.6. reshard
        • 是什么
        • 开发人员怎么用
        • 运维人员怎么看
        • 常见风险
        • 3.7. hash tag
        • 是什么
        • 开发人员怎么用
        • 运维人员怎么看
        • 常见风险
        • 3.8. 多 key 限制
        • 是什么
        • 开发人员怎么用
        • 运维人员怎么看
        • 常见风险
        • 3.9. 本篇学习实验
      • 4. 核心机制
      • 5. 工程实践
      • 6. 常见坑
      • 7. 专家视角
      • 8. Tips 快问快答
      • 9. 阶段小结
    • Redis缓存管理
    • 缓存穿透击穿雪崩
    • 热点Key与大Key治理
    • 一致性与缓存更新策略
    • 发布订阅与Lua脚本
    • Redis事务
    • Redis Functions与可编程能力
    • Redis安全与多租户治理
    • Redis监控排障与性能优化
    • Redis数据结构高级专题
    • Redis分布式锁
  • Oracle

目录

Redis Cluster集群

Redis Cluster 通过 16384 个哈希槽将数据分布到多个主节点,每个主节点可配置从节点做高可用。它解决容量和吞吐扩展问题,但也带来多 key 操作、迁移和客户端路由复杂度。

# 1. 学习定位

维度 内容
难度层级 分布式架构
核心目标 先会用,再理解机制,最后能做工程取舍和故障分析
学习方法 带着业务场景看命令、SQL、数据结构、日志和运行时指标

# 2. 核心地图

Redis Cluster集群
├─ hash slot
├─ MOVED
├─ ASK
├─ 主从分片
├─ 故障转移
├─ reshard
├─ hash tag
└─ 多 key 限制

# 3. 小章节深度讲解

下面把核心地图中的每个点拆开讲。每个小节都同时面向开发和运维:开发侧关注怎么设计、怎么写代码、怎么避免错误;运维侧关注怎么监控、怎么定位、怎么恢复。

# 3.1. hash slot

# 是什么

hash slot 是 Redis Cluster 的数据分布单位。Redis Cluster 固定使用 16384 个槽,key 经过 CRC16 计算后映射到某个槽,槽再归属于具体主节点。

# 开发人员怎么用

开发人员要知道同一个业务聚合如果需要多 key 操作,必须通过 hash tag 控制 key 落在同一槽。例如 order:{123}:detail 和 order:{123}:items 会使用 {123} 计算槽。

# 运维人员怎么看

运维人员要观察槽分布是否均衡、某些槽是否承载热点 key、迁移时槽状态是否正常。扩容不是移动 key 的概念,而是迁移槽及槽内数据。

# 常见风险

常见风险是总节点看起来均衡,但单个槽里有热点 key,导致一个分片被打爆。Cluster 解决容量,不自动解决单 key 热点。

# 3.2. MOVED

# 是什么

MOVED 是 Redis Cluster 的永久重定向响应,表示客户端访问的槽不在当前节点,应该去响应中给出的节点访问。

# 开发人员怎么用

开发人员必须使用支持 Cluster 的客户端,让客户端缓存并刷新槽映射。自己手写重试逻辑时,要正确处理 MOVED 并更新路由,而不是无限重试原节点。

# 运维人员怎么看

运维人员在扩容、故障转移或槽迁移后看到 MOVED 增多,通常表示客户端槽缓存正在刷新。若持续大量出现,要检查客户端拓扑刷新机制。

# 常见风险

常见风险是使用普通单机客户端连接 Cluster,遇到 MOVED 后无法处理,业务表现为大量随机失败。

# 3.3. ASK

# 是什么

ASK 是 Redis Cluster 槽迁移期间的临时重定向。它表示目标节点临时接管某个 key 的访问,但槽的最终归属还没有永久切换。

# 开发人员怎么用

开发人员通常依赖 Cluster 客户端自动处理 ASK。手工实现时,需要先向目标节点发送 ASKING,再执行原命令,且不要把槽缓存永久改到目标节点。

# 运维人员怎么看

运维人员在 reshard 期间看到 ASK 是正常现象。关键是观察迁移速率、业务延迟和失败率,避免迁移批量过大造成阻塞。

# 常见风险

常见风险是把 ASK 当 MOVED 处理,错误更新槽缓存,导致迁移期间路由混乱。

# 3.4. 主从分片

# 是什么

主从分片 属于 Redis 高可用或集群拓扑。它决定数据如何复制、故障时如何提升新主、客户端如何找到正确节点。

# 开发人员怎么用

开发人员要选择支持 Sentinel 或 Cluster 的客户端,并处理读旧数据、重定向、拓扑刷新和跨槽限制。

# 运维人员怎么看

运维人员要监控复制延迟、offset 差距、backlog 命中、Sentinel quorum、槽迁移和每个分片的内存/QPS/延迟。

# 常见风险

常见风险是只看集群总容量,忽略单槽热点、单 key 热点和客户端不支持重定向。

# 3.5. 故障转移

# 是什么

故障转移 属于 Redis 高可用或集群拓扑。它决定数据如何复制、故障时如何提升新主、客户端如何找到正确节点。

# 开发人员怎么用

开发人员要选择支持 Sentinel 或 Cluster 的客户端,并处理读旧数据、重定向、拓扑刷新和跨槽限制。

# 运维人员怎么看

运维人员要监控复制延迟、offset 差距、backlog 命中、Sentinel quorum、槽迁移和每个分片的内存/QPS/延迟。

# 常见风险

常见风险是只看集群总容量,忽略单槽热点、单 key 热点和客户端不支持重定向。

# 3.6. reshard

# 是什么

reshard 是 Redis Cluster 的槽迁移过程,通常用于扩容、缩容或重新均衡。迁移时源节点和目标节点会进入 MIGRATING/IMPORTING 等状态。

# 开发人员怎么用

开发人员要保证业务客户端能正确处理 ASK/MOVED,并避免在迁移窗口执行超大多 key 操作或长 Lua 脚本。

# 运维人员怎么看

运维人员要控制迁移批大小和节奏,观察源/目标节点 CPU、内存、网络、延迟和失败 key。迁移应有暂停、回滚和校验流程。

# 常见风险

常见风险是把 reshard 当成无成本后台操作。大 key 迁移会带来明显网络和主线程压力,严重时影响在线请求。

# 3.7. hash tag

# 是什么

hash tag 是 Redis Cluster 控制槽位的机制。key 中花括号内的内容会被用于计算槽,从而让相关 key 落到同一个槽。

# 开发人员怎么用

开发人员可以用 hash tag 支持多 key 原子操作或同用户数据聚合,但不能滥用。所有 key 都使用同一个 tag 会把 Cluster 打回单分片。

# 运维人员怎么看

运维人员要检查 tag 设计是否造成槽倾斜。热点业务 tag 过于集中时,即使节点很多也无法分散流量。

# 常见风险

常见风险是为了避免 CROSSSLOT,把大量 key 强行放到一个 tag 下,短期解决报错,长期制造热点分片。

# 3.8. 多 key 限制

# 是什么

多 key 限制是 Redis Cluster 的重要边界。涉及多个 key 的命令、事务或脚本,通常要求这些 key 位于同一个槽,否则会报 CROSSSLOT。

# 开发人员怎么用

开发人员在设计 key 时要提前判断是否需要 MGET、MSET、Lua、事务或集合运算。如果需要,就要设计 hash tag 或改成单 key 数据模型。

# 运维人员怎么看

运维人员看到 CROSSSLOT 错误,要推动业务修正 key 模型,而不是只让客户端重试。跨槽限制是架构边界,不是瞬时故障。

# 常见风险

常见风险是单机 Redis 上运行良好的 Lua 和多 key 命令,迁移到 Cluster 后集中失败。Cluster 改造必须做命令兼容扫描。

# 3.9. 本篇学习实验

建议准备一个独立 Redis 实例,构造小 key、大 key、热点 key、过期 key 和慢命令,观察 INFO、SLOWLOG、LATENCY、内存变化和客户端超时。每个实验都要记录命令复杂度和返回数据量。

开发侧实验重点是理解数据结构和命令边界,运维侧实验重点是理解延迟、内存和复制如何变化。真正掌握本篇内容,应该能从延迟尖刺反推大 key、慢命令、持久化或网络问题。

# 4. 核心机制

  • key 通过 CRC16 映射到 16384 个槽,槽再分配给不同主节点。
  • 客户端访问错误节点会收到 MOVED 或 ASK 重定向,智能客户端会缓存槽映射。
  • 同一条多 key 命令要求 key 位于同一槽,hash tag 可让相关 key 固定到同一槽。
  • 故障转移在分片内部进行,从节点可提升为主节点。

# 5. 工程实践

  • Cluster 客户端必须正确支持槽路由和拓扑刷新。
  • 多 key 业务提前设计 hash tag,避免上线后发现命令不可用。
  • 扩容缩容要控制迁移速率,避免影响在线延迟。
  • 监控每个分片的内存、QPS、延迟、槽分布和复制状态。

# 6. 常见坑

  • 把单机 Lua 脚本直接搬到 Cluster,跨槽访问失败。
  • key 分布不均,某个槽或分片成为热点。
  • 客户端槽缓存不刷新,拓扑变化后大量报错。
  • 只看总容量,不看单分片大 key 和热点 key。

# 7. 专家视角

  • Cluster 的关键不是节点数量,而是槽分布、热点治理和客户端行为。
  • 专家会把 key 命名、hash tag 和业务聚合边界一起设计。
  • 分布式 Redis 让容量变大,但单 key、单槽和单命令的限制仍然存在。

# 8. Tips 快问快答

Q:Redis Cluster 有多少槽?

A:16384 个哈希槽。

Q:多 key 命令为什么报 CROSSSLOT?

A:因为多个 key 不在同一个槽。

Q:hash tag 是什么?

A:key 中花括号内的部分用于计算槽,可让相关 key 落到同一槽。

# 9. 阶段小结

Redis Cluster集群 的学习重点不是记住零散概念,而是把它放回真实系统:数据如何进入、如何存储、如何被查询、如何在并发下保持正确、如何在故障后恢复。掌握这些连接关系,才能从“会用”走向“能设计、能优化、能排障”。

上次更新: 2026/06/25, 15:30:11
Sentinel哨兵机制
Redis缓存管理

← Sentinel哨兵机制 Redis缓存管理→

Copyright © 2023-2026 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式