持久化与高可用
1. 这是什么
持久化用于把内存数据保存到磁盘,高可用用于在节点故障时尽量保持 Redis 服务能力。 这两部分决定了 Redis 是否能稳定支撑线上业务。
一句话理解:
- 持久化解决“掉电后数据还能不能回来”
- 高可用解决“节点挂了服务还能不能继续”
2. 为什么重要
如果只会把 Redis 当缓存用,而不了解持久化和高可用,就很难判断:
- 数据丢失风险
- 故障恢复策略
- 主从切换成本
生产环境里,Redis 不是只追求快,也要考虑稳。
3. 先建立直觉:主从复制不等于真正高可用
一个很容易误解的点是:
- 有主从复制 = 高可用
其实并不是。 复制只是说明:
- 数据在同步
但高可用还要额外解决:
- 故障检测
- 角色切换
- 客户端流量切换
- 复制延迟带来的业务影响
4. 核心内容
4.1 RDB
RDB 可以理解成:
- 某个时刻把内存快照落盘
优点:
- 恢复速度通常较快
- 文件体积通常更适合做备份
缺点:
- 两次快照之间的数据可能丢失
4.2 AOF
AOF 可以理解成:
- 按命令追加记录写操作日志
优点:
- 通常数据丢失窗口更小
缺点:
- 文件可能更大
- 恢复时要重放日志
4.3 混合持久化
混合持久化的思路可以先粗略理解为:
- 结合 RDB 的恢复效率
- 和 AOF 的数据完整性优势
学习阶段先建立这种工程折中意识即可。
4.4 主从复制
Redis 主从复制的核心目标是:
- 数据同步
- 读扩展
- 容灾基础
但它不直接等于:
- 自动故障切换
4.5 Sentinel
Sentinel 主要解决的是:
- 主节点故障检测
- 主从切换
- 配置感知
学习阶段最重要的理解是:
- Sentinel 关注的是高可用控制层
- 它和“单纯有从库”不是一回事
4.6 Cluster 基础认知
Redis Cluster 更适合解决:
- 数据分片
- 更大规模容量扩展
它不只是“多台 Redis”,而是:
- 带有槽位和分片语义的集群系统
5. 学习重点
这一章最重要的是掌握:
- RDB 和 AOF 的核心取舍
- 主从复制、Sentinel、Cluster 解决的是不同层次问题
- 有复制不等于真正高可用
- 恢复速度和数据丢失窗口是持久化设计的核心权衡
6. 常见问题
6.1 只关心性能,不关心丢数据风险
这会让系统表面很快,但可靠性不足。
6.2 把主从复制等同于高可用
复制和高可用不是同一件事。
6.3 不理解哨兵和集群的职责差异
一个偏高可用控制,一个偏分片扩展,不能混为一谈。
7. 动手验证
这一节我用当前已经跑起来的 Redis 容器做基础验证。
7.1 查看当前持久化配置
bash
docker exec redis-lab redis-cli INFO persistence
docker exec redis-lab redis-cli CONFIG GET appendonly save我已经实际看到过类似关键信息:
text
aof_enabled:0
rdb_last_bgsave_status:ok
save
3600 1 300 100 60 10000
appendonly
no这些信息说明:
- 当前实例启用了基于
save规则的 RDB 思路 - AOF 当前未开启
7.2 你应该观察什么
重点看:
aof_enabledrdb_last_bgsave_statussave规则
这些字段能帮助你快速判断:
- 当前实例更偏哪种持久化模式
8. 练习建议
- 对比 RDB 和 AOF 的适用场景
- 画一张 Redis 高可用结构图
- 总结常见 Redis 部署模式差异
- 用自己的话解释“为什么复制不等于高可用”
9. 自测问题
- RDB 和 AOF 各有什么优缺点?
- Sentinel 主要解决什么问题?
- Redis Cluster 更适合解决什么类型需求?
- 为什么“有复制”不等于“高可用”?
10. 自测核对要点
- RDB 偏快照,AOF 偏日志
- 持久化设计核心在于恢复速度与数据丢失窗口的权衡
- 主从复制提供同步基础,不自动等于高可用
- Sentinel 和 Cluster 分别解决不同层面的系统问题