Skip to content
Redis 基础模型与高频场景 · 第 4 篇 / 共 4 篇
领域数据与中间件
专题Redis 专题
当前序列Redis 基础模型与高频场景
阅读位置第 4 篇 / 共 4 篇当前专题第 1 个序列 / 共 7 个序列

Redis 集群与分片:单机撑不住之后,主从、哨兵、Cluster 分别解决什么问题

很多项目最初 Redis 都是:

  • 单机
  • 一个实例
  • 配点持久化就先用了

但数据量和请求量上来后,就会慢慢遇到这些问题:

  • 单机内存不够
  • 单点故障风险高
  • 读写压力变大

这时通常就会接触:

  • 主从
  • 哨兵
  • Cluster

先说结论

可以先这样理解它们的职责:

  • 主从:扩展读能力,提供副本
  • 哨兵:解决主从下的故障发现和主从切换
  • Cluster:解决横向分片和更大规模扩展

也就是说:

  • 主从和哨兵更偏高可用
  • Cluster 更偏高可用 + 可扩展

真正选型时,最重要的不是“是不是流行用 Cluster”,而是先分清自己面临的瓶颈到底是什么:

  • 可用性不够
  • 读压力不够
  • 写压力不够
  • 单机容量不够
  • 热点分布不均

一、单机 Redis 的边界在哪里

单机 Redis 的问题很典型:

  • 内存上限受限于单机
  • 宕机就是单点故障
  • 热点过高时压力集中

所以单机 Redis 通常更适合作为:

  • 早期项目
  • 中小规模场景

二、主从复制解决什么

主从的核心价值是:

  • 主节点负责写
  • 从节点同步数据
  • 读可以部分分摊到从节点

它主要带来的收益:

  • 提高读能力
  • 为故障恢复和备份提供基础

但它不能解决:

  • 单机内存上限
  • 主节点写入瓶颈
  • 热点 key 集中在一个主节点的问题

因为数据还是全量复制到从节点,不是分片。

三、哨兵为什么重要

只有主从还不够,因为一旦主节点挂了,还需要有人来:

  • 发现故障
  • 选新主
  • 通知客户端更新连接

这就是哨兵的主要价值。

可以先粗略理解成:

  • Redis 主从架构里的高可用管理层

但要注意,哨兵并不会自动帮你解决:

  • 数据分片
  • 单机容量上限
  • 热点写流量集中

它只是把“主从可切换”这件事标准化了。

四、Cluster 在解决什么问题

当问题不只是高可用,而是:

  • 单机容量撑不住
  • 单个主节点吞吐也不够

就要进入:

  • 数据分片

Cluster 的核心价值就是:

  • 把数据分散到多个节点上

这意味着它不仅解决可用性问题,还解决:

  • 横向扩容问题
  • 多主承载更大数据量
  • 多主分摊写压力

它的核心机制是槽位分片。
Redis Cluster 把 key 映射到 16384 个 hash slot,再把 slot 分配给不同主节点。

五、为什么 Cluster 和主从/哨兵不是一个层级

很多人会把它们并列理解,其实不完全准确。

可以粗略理解为:

  • 主从:复制
  • 哨兵:主从高可用治理
  • Cluster:分片 + 副本 + 高可用

所以 Cluster 更像是一套完整的分布式 Redis 方案。

在 Cluster 里,每个主节点通常也会有自己的从节点。
也就是说,Cluster 内部其实包含了“分片 + 副本”两层。

六、什么时候该考虑分片

通常是当你开始明显遇到这些问题时:

  • 单实例内存快到顶
  • 热点数据太重
  • 单节点写入压力太高

这时只做主从复制通常不够,因为:

  • 它不减少主节点写压力
  • 也不扩大单实例可承载的数据上限

再往前一步,如果你已经有下面这些现象,基本就要认真评估 Cluster 了:

  • 单机内存接近上限,且还会继续涨
  • AOF / RDB 体积已经很大
  • 某个主节点 CPU 和网络长期高于其他节点
  • 业务需要更大的写并发

七、分片不是万能药

很多团队以为一上 Cluster 就万事大吉,实际上分片会带来新的约束。

1. 多 key 操作受限制

如果多个 key 不在同一个 slot,上层需要重新设计数据模型或使用 hash tag。

2. 热点可能仍然存在

如果一个超级热 key 本身就只有一个,那它无论在哪个分片上,热点都不会自动消失。

3. 运维复杂度上升

你要面对:

  • 槽位迁移
  • 节点扩缩容
  • 客户端路由
  • 故障切换后的连接刷新

八、一个更实用的判断顺序

如果你在做 Redis 架构升级,可以先按下面顺序判断:

  1. 只是怕单点故障吗
  2. 只是想扩读吗
  3. 写流量和容量是不是已经超过单主边界
  4. 业务是否能接受分片后的多 key 约束

一般来说:

  • 只补高可用:主从 + 哨兵
  • 既要高可用又要横向扩容:Cluster

九、热点治理要单独思考

哪怕已经上了 Cluster,也别忽略热点 key 治理。
因为 Cluster 解决的是“整体分布”,不是“单 key 热点”。

如果热点非常集中,仍可能需要:

  • 本地缓存
  • 热点副本 key
  • 单独热点服务
  • 业务侧降级与限流

十、几个常见误区

1. 以为主从就等于扩容

它主要扩的是读,不是总容量。

2. 以为哨兵就是集群

哨兵不负责分片。

3. 以为 Cluster 一上就所有问题都解决

分片之后也会引入:

  • 运维复杂度
  • 多 key 操作限制
  • 热点分布不均问题

4. 把高可用和扩容问题混在一起

很多时候你并不需要立刻上 Cluster,只是需要先把单点和切主治理好。

一句话总结

Redis 从单机走向分布式时,最先要分清“我要解决的是高可用,还是容量扩展”。

主从和哨兵更偏高可用,Cluster 才真正把分片和规模扩展带进来。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 回看前文会更完整Redis 布隆过滤器怎么用适合把数据结构、典型场景、布隆过滤器和集群分片放在一起先打底。Redis 专题 · Redis 基础模型与高频场景同一序列 · 回看前文会更完整Redis 数据结构怎么选适合把数据结构、典型场景、布隆过滤器和集群分片放在一起先打底。Redis 专题 · Redis 基础模型与高频场景同专题其他序列 · Redis 高可用、过期与性能治理过期键删除策略为什么会影响 RT适合把复制、故障切换、槽迁移、内存碎片和冷启动预热放在一条 Redis 稳定性主线上看。Redis 专题 · Redis 高可用、过期与性能治理同专题其他序列 · Redis 可用性与热点治理细节缓存穿透治理怎么做更稳适合把 Sentinel、穿透防护、延迟队列和地理位置搜索放在一起看。Redis 专题 · Redis 可用性与热点治理细节跨专题关联 · 同场景:基础学习@Conditional 系列注解怎么配合使用适合把自动装配、条件装配、Profile 和循环依赖放回 Spring Boot 启动过程里理解。Spring 专题 · Spring Boot 启动、装配与配置跨专题关联 · 同场景:基础学习保留策略和日志压缩适合哪些场景适合把副本机制、acks、批量压缩和日志组织放在一条 Kafka 投递主线上理解。Kafka 专题 · Kafka 投递链路与日志存储机制
继续阅读Redis 基础模型与高频场景当前序列第 4 篇 / 共 4 篇当前专题第 1 个序列 / 共 7 个序列
往前看
上一篇Redis 布隆过滤器怎么用回到当前序列上一章上一序列MySQL 事务、锁与高可用从第 1 篇开始:MySQL 事务与锁
往后看
下一序列Redis 缓存一致性与更新策略从第 1 篇开始:Redis 缓存更新策略

把零散经验整理成可查、可复用、可持续更新的企业级知识门户