Redis RDB 持久化全量快照详解
RDB(Redis Database)是 Redis 的持久化方式之一,通过创建内存数据的全量快照来实现持久化。

核心原理
RDB 将某一时刻的 Redis 内存数据完整地保存到一个二进制文件中(默认 dump.rdb),相当于给内存数据拍了张"照片"。
触发方式
手动触发
# SAVE - 同步方式,会阻塞 Redis 服务器 redis> SAVE # BGSAVE - 异步方式,fork子进程后台处理(推荐) redis> BGSAVE
自动触发(配置)
# 在 redis.conf 中配置 save 规则 save 900 1 # 900秒内至少有1个key变化 save 300 10 # 300秒内至少有10个key变化 save 60 10000 # 60秒内至少有10000个key变化
其他触发场景
- 主从复制时,主节点自动生成 RDB 文件
- 执行
SHUTDOWN命令 - 执行
FLUSHALL命令(生成空快照)
RDB 文件结构
+-------------------+
| "REDIS" (5字节) | ← 魔数标识
+-------------------+
| RDB版本号 (4字节) |
+-------------------+
| 辅助字段 | ← redis版本、创建时间等
+-------------------+
| 数据库数据 | ← 实际数据(键值对)
| - DB编号 |
| - 哈希表大小 |
| - 过期时间 |
| - 键(字符串) |
| - 值(编码) |
+-------------------+
| EOF (1字节) | ← 结束标记
+-------------------+
| 校验和 (8字节) | ← CRC64校验
+-------------------+
执行流程(BGSAVE)
客户端发送 BGSAVE 命令
2. Redis 主进程检查:
- 是否已有子进程在执行 BGSAVE
- 是否已有子进程在执行 AOF 重写
3. 主进程 fork() 子进程
├── 主进程:继续处理客户端请求(使用写时复制技术)
└── 子进程:将内存数据写入临时 RDB 文件
4. 子进程完成写入后:
- 用临时文件替换旧的 RDB 文件(原子操作)
- 向父进程发送信号通知完成
5. 父进程更新统计信息
写时复制机制
- fork 时:父子进程共享内存页
- 数据修改时:被修改的内存页会复制一份给子进程
- 优势:即使使用子进程,内存消耗也只是被修改的数据量,而非整个数据集
优缺点分析
优点 ✅
- 紧凑高效:RDB 文件是二进制压缩的,比 AOF 文件小
- 恢复快速:加载 RDB 文件比 AOF 重放快得多
- 性能较好:fork 子进程处理,主进程几乎不受影响
- 适合备份:可以定期保存 RDB 文件作为历史快照
缺点 ❌
- 存在数据丢失风险:最近一次快照后的数据可能丢失
- fork 开销:数据量大时 fork 会耗时间(取决于内存大小)
- 无法实时持久化:快照生成有时间间隔
配置优化建议
# 保存触发条件 save 900 1 save 300 10 save 60 10000 # RDB 文件压缩(默认 yes,建议开启) rdbcompression yes # 是否检查 RDB 文件校验和(默认 yes) rdbchecksum yes # RDB 文件名 dbfilename dump.rdb # RDB 文件保存目录 dir /data/redis/ # 当磁盘错误时是否停止写入(推荐 yes) stop-writes-on-bgsave-error yes
恢复数据
- 自动恢复:启动 Redis 时自动加载
- 加载顺序:优先 AOF(若同时开启),RDB 作为备选
- 手动恢复:复制 RDB 文件到配置目录,重启 Redis
监控与诊断
# 查看持久化状态 redis> INFO Persistence # 关键字段解读: - rdb_last_save_time: 最后成功保存时间戳 - rdb_bgsave_in_progress: 是否正在执行 BGSAVE - rdb_last_bgsave_status: 最后一次 BGSAVE 状态 - rdb_current_bgsave_time_sec: 当前 BGSAVE 已执行秒数
最佳实践
- 混合持化方案:RDB + AOF 组合使用
- 备份策略:定期将 RDB 文件备份到远程存储
- 内存监控:fork 时内存可能翻倍,需预留足够内存
- 延迟设置:根据业务容忍度调整 save 触发条件
- 版本兼容:低版本 Redis 无法加载高版本 RDB 文件
RDB 适合对数据完整性要求不高但追求恢复速度的场景,比如缓存数据、可以容忍少量数据丢失的业务系统。