Redis 进阶篇:持久化 + 主从复制 + 哨兵 + 集群(面试必杀)
本篇你将掌握:
- Redis 数据为什么不会完全丢
- Redis 如何实现高可用
- Redis 如何支撑大规模系统
- 面试官最爱问的架构问题
一、Redis 为什么不会"完全丢数据"?
很多人以为:
text
Redis = 内存数据库 = 一断电就没了 ❌
其实:
Redis 提供 持久化机制
二、Redis 持久化机制
Redis 有两种核心持久化方式:
| 方式 | 本质 |
|---|---|
| RDB | 快照 |
| AOF | 日志 |
1️⃣ RDB(快照模式)
什么是 RDB?
在某一时刻,把内存数据 拍个快照存到磁盘
类比理解
text
RDB ≈ 游戏存档
触发方式
自动触发(配置)
bash
save 900 1 # 900秒内有1次修改
save 300 10
save 60 10000
手动触发
bash
SAVE # 同步(阻塞)
BGSAVE # 异步(推荐)
✅ 优点
- 恢复速度快
- 文件小
- 性能影响低
❌ 缺点
会丢数据!
text
最后一次快照之后的数据可能丢失
2️⃣ AOF(追加日志)
什么是 AOF?
把每一次写操作记录下来
text
SET name Tom
INCR count
类比
text
AOF ≈ 操作日志(回放恢复)
三种刷盘策略(面试必问)
| 策略 | 说明 |
|---|---|
| always | 每次写都同步(最安全) |
| everysec | 每秒同步(推荐) |
| no | 操作系统决定 |
✅ 优点
- 更安全(最多丢1秒数据)
❌ 缺点
- 文件大
- 恢复慢
3️⃣ 面试标准答案
Redis 持久化如何选?
text
生产环境:AOF + RDB 混合使用
Redis 4.0 之后:
- 支持 混合持久化(AOF + RDB)
三、Redis 高可用:主从复制(核心)
为什么需要主从?
text
单机 Redis → 容易挂 ❌
解决:
text
一主多从(Master + Slave)
架构图(理解)
text
Master
/ \
Slave Slave
原理(面试重点)
第一次同步(全量复制)
- Slave 发送请求
- Master 执行:
text
BGSAVE → 生成 RDB
- 发送给 Slave
- Slave 加载数据
后续同步(增量复制)
通过 命令传播
面试加分点
Redis 复制是:
text
异步复制(重要!)
四、Redis 哨兵(Sentinel)
为什么需要哨兵?
主从架构问题:
text
Master 挂了怎么办?❌
哨兵的作用:
1️⃣ 监控 Redis
2️⃣ 自动故障转移
3️⃣ 选举新 Master
架构图
text
Sentinel Sentinel Sentinel
\ | /
Redis集群
故障转移流程(面试重点)
- 哨兵发现 Master 挂了
- 投票选举新 Master
- Slave 升级为 Master
- 通知客户端
面试关键点
哨兵是:
text
分布式系统(多个节点投票)
五、Redis 集群(Cluster)
为什么需要集群?
主从的问题:
text
数据量太大 → 一台机器放不下 ❌
解决:
text
Redis Cluster(分片)
核心思想
数据分散到多个节点
核心机制:Hash Slot(槽位)
Redis 有:
text
16384 个槽位
数据分布
text
key → hash → slot → 节点
示例
text
Node1: 0-5000
Node2: 5001-10000
Node3: 10001-16383
面试高频问题
为什么是 16384?
权衡:
- 太大 → 计算复杂
- 太小 → 分布不均
集群特点
- 去中心化
- 自动分片
- 支持扩容
六、Redis 架构总结
三种模式对比
| 模式 | 特点 |
|---|---|
| 单机 | 简单,但不可靠 |
| 主从 | 读写分离 |
| 哨兵 | 高可用 |
| 集群 | 高可用 + 高扩展 |
七、面试高频问题
1. RDB 和 AOF 区别?
text
RDB:快照,恢复快,但可能丢数据
AOF:日志,更安全,但恢复慢
2. Redis 如何保证高可用?
text
主从复制 + 哨兵
3. Redis 集群如何分片?
text
Hash Slot(16384)
4. 主从复制是同步的吗?
text
不是 → 异步复制
5. 哨兵如何选主?
text
投票机制(类似 Raft 思想)
八、实际开发建议
✅ 生产推荐架构
text
Redis Cluster + 哨兵(或云服务)
✅ 持久化推荐
text
AOF everysec + RDB
✅ 客户端建议
- Spring Boot → Lettuce(默认)
- 避免 Jedis 连接池问题
九、总结(面试速记版)
text
Redis 高可用核心:
1. 持久化(RDB + AOF)
2. 主从复制(读写分离)
3. 哨兵(自动故障转移)
4. 集群(分片 + 扩展)