缓存服务一旦挂掉,整个系统的响应速度都会崩。Redis 从单机到高可用,一般经历三个阶段:主从复制 → 哨兵 Sentinel → Cluster 集群。这篇把三个阶段讲清楚。
一、为什么不能只跑单点 Redis
单点 Redis 的问题很直接:机器挂了服务就没了。更隐蔽的是,主从复制模式下如果只有主节点可写,主节点宕机后虽然从节点有数据,但不会自动顶上——需要人为切换,期间写操作全部失败。因此高可用必须解决两件事:数据有备份(复制)+ 故障自动切换(哨兵/集群)。
二、主从复制:数据先有备份
主从复制配置简单:slaveof <主节点IP> <端口> 或在配置里声明 replicaof。复制过程要点:
- 全量同步:从节点首次连接时,主节点生成 RDB 快照传送,后续增量用命令传播;
- 增量同步:断线重连后从复制积压缓冲区(repl-backlog)补数据;
- 读写分离:读请求可以打到从节点,写请求仍走主节点。
主从只解决"数据冗余",不解决"自动故障转移"。
三、哨兵 Sentinel:自动故障转移
Sentinel 是独立进程,监控主从节点的健康状态,在主节点不可用时自动将从节点提升为新主节点,并通知客户端切换。
关键机制:
- 心跳检测:Sentinel 每秒 PING 主从节点,主观下线(单个哨兵判断)→ 客观下线(多数哨兵确认);
- 选举与切换:客观下线后,Sentinel 选出新主节点,其他从节点重新指向新主;
- 最少部署:哨兵本身要避免单点,至少 3 个哨兵实例组成集群,并部署在不同机器。
四、Cluster 集群:数据分片 + 高可用
数据量大了单机放不下,就要上 Cluster:
- 槽位分片:16384 个哈希槽分配到各主节点,KEY 经 CRC16 取模定位到槽;
- 主从配对:每个主节点配一个或多个从节点,主挂从顶;
- 故障转移:集群中多数节点判定某主节点不可达后,提升其从节点;
- 客户端重定向:访问到错误槽位时,节点返回 MOVED/ASK,客户端跟随跳转。
五、选型建议
- 数据量小、要低成本 → 主从 + 哨兵(读写分离 + 自动切换);
- 数据量大、有分片需求 → Cluster(自动分片 + 高可用);
- 追求极简 → 托管版 Redis(云厂商已管理哨兵/集群)。
写在最后
理解这条演进线:单点 → 主从(备份)→ 哨兵(自动切换)→ Cluster(分片 + 高可用),Redis 高可用的架构题基本都能答到位。面试时记得主动说出各级的"缺点为什么存在",比死记配置更能体现理解。
多动手敲一遍搭建流程,再配合八股复习效果更好——需要刷题的话,可以用 可面猫笔试助手 把 Redis 专题的题过一遍,检验掌握程度。