首页/数据/Redis 进阶速查/启动加载:数据库从文件恢复的顺序
持久化56 条

启动加载:数据库从文件恢复的顺序

重启时 Redis 先按配置判断加载来源:开启 AOF 且文件存在时优先加载 AOF,否则加载 RDB;两者都不存在则以空库启动。

Redis 进阶速查数据更新于 2026-10-13

启动时的加载顺序

实例启动后按固定优先级挑选恢复来源:appendonly 为 yes 且 AOF 文件存在时加载 AOF,因为它的数据更接近最新;否则加载 dir/dbfilename 指向的 RDB 快照;两份都不存在则以空库启动。要注意「文件在不在」和「实际加载了哪一份」是两件事:开启 AOF 之后 RDB 仍然会继续生成,但启动时并不会被优先读取。判断当前数据来自哪里,最直接的办法是看启动日志那一行。

基本信息

优先级一appendonly yes 且 AOF 文件可用时加载 AOF
优先级二AOF 不可用时加载 dir 目录下的 RDB 快照
都不存在以空库启动,DBSIZE 为 0,只记录日志不报错
日志判据DB loaded from append only file / DB loaded from disk
加载过程由主线程完成,期间不能处理任何命令
耗时因素键数量、单值体积、maxmemory 与磁盘速度共同决定启动时长

典型使用场景

  • 数据迁移与克隆:把快照文件放到目标实例的 dir 下启动,快速得到一份数据副本
  • 恢复演练:在隔离环境用备份文件启动,验证备份可用并量化加载耗时
  • 排查数据变少:先确认加载来源与加载结果,再怀疑业务写入逻辑
  • 版本升级预演:用同一份数据在新版本上加载,提前暴露格式兼容问题
  • 评估停机窗口:按实测加载时间安排维护窗口与健康检查宽限期

确认加载来源与结果

确认加载来源与结果
redis-cli CONFIG GET appendonly          # 先确认 AOF 是否开启
redis-cli CONFIG GET dir                 # 数据目录,快照与 AOF 都在这里找
redis-cli INFO persistence | grep -E '^loading|aof_enabled|aof_last_bgrewrite_status'
redis-cli DBSIZE                         # 加载后的键数量
redis-cli INFO keyspace                  # 分库键数量与过期情况
sudo tail -n 100 /var/log/redis/redis-server.log | grep -iE 'DB loaded|loading|Wrong signature|Bad file format'

加载来源判定

启动条件加载来源说明
appendonly yes 且 AOF 可用AOF数据最接近最新,重写前文件体积可能明显大于 RDB
appendonly no 且 RDB 存在RDB快照时刻的全量数据,之后的写入已丢失
两者都不存在空库首次启动的正常表现,需确认不是目录或权限写错
文件损坏启动失败进程直接退出并打印格式错误,需先修复文件再看日志
AOF 开启但文件缺失按版本而异不同大版本处理方式不同,必须以该版本的启动日志为准
加载是单线程同步完成的,大实例可能持续几十秒到几分钟。这段时间里端口已经监听,客户端能连上但命令会一直等待,健康检查若只判断端口连通就会误判为「已就绪」。滚动重启时要么调长探针的超时与失败阈值,要么在应用侧等 INFO 里的 loading 变为 0。
在 appendonly yes 的实例上把旧的 dump.rdb 覆盖进 dir 目录,并不会改变启动后看到的数据库:AOF 优先级更高,数据依旧来自 AOF。迁移数据前先确认 appendonly 状态、aof 文件实际位置,否则很容易得出「文件换了数据没变」的结论。

易错点

  • 认为有 RDB 就有底:appendonly yes 时启动加载的是 AOF,磁盘上那份 RDB 可能已经是几天前的旧文件
  • AOF 尾部损坏时实例直接启动失败,业务表现为「服务起不来」;处理顺序应是先备份、停实例,再用修复工具截断而不是直接覆盖删除
  • 把 dump.rdb 复制进 dir 做迁移,遇到目标实例开了 AOF 会被忽略,最终数据为空或与预期不符
  • 多个实例共用同一个 dir 且 dbfilename 相同时,快照互相覆盖,重启后可能加载到别的实例数据
  • 只升级二进制不改数据目录权限,加载时因读不到文件而以空库启动,业务侧看到的是「数据全没了」

数据来源与参考

  • Redis 官方文档:持久化加载顺序说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌