Redis 进阶 02:RDB、AOF 与备份恢复
实验基线:Redis 7.4.11,先完成环境准备。除标注为宿主机终端的代码外,Redis 命令在该课指定的 redis-cli 中执行;不复制输出结果作为命令。
学习目标#
理解 RDB 与 AOF 的恢复来源、丢失窗口和磁盘开销,用独立容器验证一次持久化恢复。
原理:持久化不等于备份#
RDB 保存某时刻的数据快照,恢复快且文件紧凑,但快照之后的写入可能丢失。AOF 记录写命令,配合重写控制文件增长。appendfsync everysec 通常每秒刷盘,仍存在约一秒级的数据丢失窗口,也受系统和故障情况影响,不是绝对承诺。
同时启用两者时 Redis 优先使用 AOF 恢复,因为它通常更完整。Redis 7 使用多文件 AOF 及 manifest,不要只拷贝一个历史 appendonly.aof 文件。复制也不是备份:误删通常会传播到副本。
实验:在宿主机创建隔离存储#
下面的卷只供本课使用。如同名卷已有重要内容,改名后同步替换所有命令,不要复用未知卷:
docker volume create redis-learning-data
docker run -d --name redis-persistence -v redis-learning-data:/data redis:7.4.11 redis-server --appendonly yes --appendfsync everysec --save ""
docker exec -it redis-persistence redis-cli
在此容器的 redis-cli 中执行:
SET learn:persistence:order:1 paid
BGSAVE
INFO persistence
SET 预期 OK。BGSAVE 开始后台生成 dump.rdb,立即读取 INFO 时 rdb_bgsave_in_progress 可能为 1;再次读取直到变成 0,且 rdb_last_bgsave_status 为 ok。AOF 相关状态也应该没有写入错误。
实验:重建容器并恢复#
QUIT 退出,然后在宿主机执行:
docker stop redis-persistence
docker rm redis-persistence
docker run -d --name redis-persistence -v redis-learning-data:/data redis:7.4.11 redis-server --appendonly yes --appendfsync everysec --save ""
docker exec redis-persistence redis-cli GET learn:persistence:order:1
预期输出 paid。正常停止会执行安全关闭,这个实验验证“卷保留后重建能恢复”,不验证突然断电的数据丢失上限。故障演练应在隔离环境进行,并先确定可接受损失。
备份与恢复流程#
- 确认后台保存完成,使用受控快照或停机窗口获取一致的备份文件。
- RDB 备份保留 dump.rdb;多文件 AOF 要保留整个 appendonlydir 和 manifest,避免在重写中复制一半。
- 将备份复制到不同故障域,记录版本、时间、校验值与访问权限。
- 在另一隔离实例恢复,检查业务样本、数量和关键 TTL,再确认恢复耗时。
- 同时定义 RPO(允许丢多少)与 RTO(允许停多久),定期恢复演练。
只验证备份文件存在,不等于验证备份可用。选择仅 RDB 恢复时要明确禁用 AOF 并使用正确目录;不要混放无关旧 AOF 后期待 RDB 覆盖它。
常见错误#
- 以为挂载目录就自动开启 AOF:需检查配置与 INFO persistence。
- 备份整个运行中 AOF 目录时忽略重写:可能得到不一致文件集。
- 内存刚够用就触发 BGSAVE:fork 与写时复制可能增加内存峰值。
- 开启持久化但磁盘已满:监控写入状态,不能隐藏错误。
练习与参考答案#
清理实验键并重启,确认删除也被保存:
docker exec redis-persistence redis-cli UNLINK learn:persistence:order:1
docker restart redis-persistence
docker exec redis-persistence redis-cli GET learn:persistence:order:1
预期最后为空输出(非交互模式的 nil),说明持久化会忠实保存删除,不能防止误操作。
清理#
仅删除本课创建的容器和卷:
docker stop redis-persistence
docker rm redis-persistence
docker volume rm redis-learning-data
官方参考#
持久化 · BGSAVE · Redis 7 AOF
学习导航#
上一课:Redis 进阶 01:内存、过期与淘汰 · 学习目录 · 下一课:Redis 进阶 03:Pipeline、事务与 Lua







