Skip to content

第22章:RDB 持久化 —— 快照 ​

本章目标 ​

理解 RDB 快照持久化方式


22.1 RDB 是什么 ​

RDB(Redis Database)在指定时间间隔将内存数据快照保存到磁盘(dump.rdb)。

内存数据 → [BGSAVE/fork子进程] → dump.rdb(二进制文件)

触发方式 ​

bash
# 手动触发
SAVE                  # 阻塞式(主进程执行,⛔ 生产禁用)
BGSAVE                # 后台式(fork子进程,✅ 推荐)

# 自动触发(redis.conf)
save 900 1            # 900秒内至少1次修改
save 300 10           # 300秒内至少10次修改
save 60 10000         # 60秒内至少10000次修改

22.2 RDB 原理 ​

1. Redis fork() 一个子进程
2. 父进程继续处理请求
3. 子进程将数据写入临时文件
4. 写入完成后原子替换旧的 dump.rdb

注意:fork() 时父子进程共享内存(Copy-on-Write)
      只有父进程修改数据时,才会复制内存页

22.3 RDB 优缺点 ​

优点缺点
✅ 二进制文件,恢复极快❌ 两次快照之间可能丢数据
✅ 文件紧凑,适合备份❌ fork 子进程时可能卡顿
✅ 对性能影响小(子进程)❌ 数据量大时 fork 耗时长

常见错误 ​

错误1:在生产环境用 SAVE ​

bash
# ❌ SAVE 在主进程执行,阻塞所有请求!
# 1GB 数据 SAVE 可能需要几秒
SAVE

# ✅ 永远用 BGSAVE
BGSAVE

错误2:不配置 save 参数 ​

bash
# ❌ 注释掉所有 save → 不自动触发 RDB → 重启丢所有数据
# save ""

# ✅ 至少保留一个触发条件
save 900 1

本章小结 ​

  • RDB = 定期快照(dump.rdb)
  • BGSAVE(后台)= 推荐,SAVE(阻塞)= 禁用
  • 优点:恢复快;缺点:可能丢数据

练习题 ​

  1. 修改 save 配置为"60秒内至少5次修改触发快照",写入测试数据观察 dump.rdb。
  2. 手动执行 BGSAVE,查看 dump.rdb 文件大小。
  3. 模拟崩溃:kill Redis → 重启 → 检查数据是否恢复。

把零散知识,整理成可以反复走的路。