【Java-Redis】Redis 有哪几种持久化方式?

在这里插入图片描述

好的,我来详细讲解 Redis 的持久化机制。这是面试中最常被问到的 Redis 核心问题之一,理解这个知识点需要结合应用场景和底层原理,我们通过一个「银行金库监控系统」的案例来辅助理解。


一、RDB 持久化(内存快照)

原理
就像银行每天下班用监控摄像头拍摄金库的全景照片。假设某银行的金库有 10 吨黄金,RDB 就是每天 18:00 自动拍一张包含所有黄金的照片存档。

触发方式

# 手动触发
127.0.0.1:6379> SAVE       # 同步阻塞拍摄(暂停业务)
127.0.0.1:6379> BGSAVE     # 异步非阻塞拍摄

# 自动触发(redis.conf)
save 900 1       # 15 分钟有 1 次写操作
save 300 10      # 5 分钟有 10 次写操作

核心问题
假设周五 18:00 拍摄后,周六金库被盗,周日通过快照恢复,会丢失周五 18:00 到周日的数据。这就是 RDB 的致命缺陷——数据完整性不足


二、AOF 持久化(操作日志)

原理
改用保安的「工作日志本」记录金库的每一次操作。例如:

2025-08-01 09:00 存入黄金 100kg
2025-08-01 10:30 取出黄金 50kg
...

配置策略

appendfsync always    # 每次操作都写日志(最安全,性能最低)
appendfsync everysec  # 每秒批量写日志(推荐)
appendfsync no        # 由操作系统决定

重写机制
当日志本太厚时(比如记录 100 次存取操作),系统会自动将日志简化为「当前金库剩余黄金总量」这一条记录,就像把「存入 100kg→取出 50kg→存入 30kg」合并为「当前余额 80kg」。


三、混合持久化(Redis 4.0+)

原理
结合 RDB 和 AOF 的优势,就像同时用快照相机和保安日志。重启时:

  1. 先加载 RDB 快照(快速恢复基础数据)
  2. 再重放 AOF 增量操作(补充最新数据)

配置方式

aof-use-rdb-preamble yes

四、方案对比与选型

RDBAOF混合模式
恢复速度快(直接加载二进制)慢(逐条执行命令)快(先 RDB 后 AOF)
文件体积小(二进制压缩)大(文本日志)中等
数据安全可能丢失分钟级数据最多丢失 1 秒数据最多丢失 1 秒数据
写性能高(无持续写入开销)低(持续写日志开销)中等

五、实战技巧

  1. 金融系统:AOF everysec + 混合持久化
  2. 缓存系统:RDB 默认配置
  3. 灾备方案:RDB 定时备份到 S3/Azure Blob
  4. 禁用场景:主从架构中从库关闭持久化

六、高频面试题

  1. BGSAVE 原理是什么?(fork 子进程 + Copy-on-Write)
  2. AOF 重写期间有新写入怎么办?(双缓冲机制)
  3. 同时开启 RDB 和 AOF 会怎样?(重启时优先 AOF)
  4. 持久化导致内存翻倍怎么处理?(监控 fork 耗时)

总结脑图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java自学之旅

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值