redis重启后数据未恢复的根本原因是持久化未生效或未正确加载:aof/rdb配置错误、文件路径/权限问题、文件损坏、fork失败、触发条件不满足或启动时未加载成功。

Redis重启后数据没恢复,根本原因只有一个:持久化没生效,或者生效了但没被正确加载。不是配置写了就完事,也不是开了AOF或RDB就自动恢复——中间有好几个关键环节会断掉。
redis.conf里开了appendonly yes,但重启后还是空的
常见错误是只改了配置,却没确认AOF文件真实存在、路径正确、权限可读写。
-
appendfilename默认是appendonly.aof,但如果你改过这个值,Redis启动时会去读那个名字的文件,而不是默认名 -
dir配置决定AOF文件写在哪,如果路径不存在或Redis用户无写入权限,AOF根本不会生成(日志里会出现Failed to open the AOF file) - AOF文件可能损坏,比如系统崩溃时正在写入,Redis启动时会拒绝加载并报错
Bad offset in AOF file—— 这时候必须手动用redis-check-aof --fix修复
RDB快照明明设置了save 300 10,但重启后还是没数据
RDB不是“只要配了就一定触发”,它依赖后台fork()成功 + 磁盘写入完成。很多生产环境卡在这两步。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
-
vm.overcommit_memory = 0会导致BGSAVE失败(日志里出现Can't save in background: fork() failed),必须设为1并执行sysctl vm.overcommit_memory=1 -
save触发条件是“300秒内至少10个key变更”,如果变更频率低,RDB文件可能几天都不更新,重启自然只能加载旧快照甚至空文件 - Redis启动时只加载
dir目录下的dump.rdb,如果之前手动备份过别的名字(比如dump.rdb.bak),它完全无视
重启前有数据,重启后连KEYS *都返回空数组
这通常意味着Redis压根没加载任何持久化文件,而是以空内存状态启动。
- 检查Redis启动日志,找这一行:
DB loaded from disk或DB loaded from append only file—— 没这句,说明加载失败或跳过了 - 确认
redis.conf里的dbfilename(RDB)和appendfilename(AOF)路径是否与实际文件位置一致 - 如果同时启用了RDB和AOF,Redis优先使用AOF;但如果AOF为空或损坏,它不会 fallback 到RDB,而是直接报错退出(除非你加了
appendonly no再试)
最容易被忽略的是:Redis加载持久化文件发生在进程启动的最早期,一旦失败,它不会警告你“我放弃了”,而是静默地用空数据集运行。所以别只看服务起来没起来,一定要盯日志里那几行关键加载提示。










