redis默认采用rdb持久化,aof默认关闭;两者可同时启用,此时重启优先加载aof文件恢复数据以保障最小丢失,aof损坏或缺失时才fallback至rdb。

Redis 默认把数据存在内存里,断电或崩溃就全丢——所以必须做持久化。RDB 和 AOF 是它仅有的两种机制,不是“选一个就行”,而是要理解各自适用场景、触发逻辑和实际风险。
RDB 是什么:快照式备份
RDB(Redis Database)本质是某个时间点的全量内存快照,生成一个压缩的二进制文件(默认 dump.rdb)。它不记录操作过程,只保存那一刻的数据状态。
- 适合做定时冷备,比如每小时存一份,用于灾难恢复或迁移
- 文件体积小、恢复快,重启时直接加载整个文件即可还原数据
- 但两次快照之间的写入操作全部丢失,例如配置为“60秒内10次修改才触发”,那最多可能丢掉近1分钟数据
RDB 怎么触发:自动+手动双路径
触发方式分两类,行为和影响差异明显:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
-
自动触发:靠 redis.conf 中的
save规则,例如save 900 1表示“900秒内至少1个键被修改”就执行 bgsave;主从全量同步、正常 shutdown、debug reload 也会自动触发 -
手动触发:
save命令会阻塞 Redis 直到写完,期间拒绝所有请求;bgsave则 fork 子进程异步执行,只在 fork 阶段短暂阻塞,生产环境只用它 - 注意:
flushall也会触发 RDB,但会生成空文件——如果没开 AOF,等于主动清空并落盘,务必禁用或加防护
AOF 是什么:操作日志式追加
AOF(Append Only File)把每个写命令(如 SET、LPUSH)按 Redis 协议格式追加到日志文件(默认 appendonly.aof)。重启时重放日志,重建数据。
- 数据安全性更高,默认配置下最多丢 1 秒数据(每秒 fsync)
- 日志文件体积随写入持续增长,需定期 AOF 重写(rewrite):后台 fork 子进程扫描当前内存,生成精简的新日志,替代旧文件
- 重写过程不影响主线程,但大量写入时可能因 fork 开销导致毫秒级延迟
RDB 和 AOF 同时开启时怎么恢复?
如果两个都启用,Redis 启动时优先使用 AOF 文件恢复——因为 AOF 记录更完整,能保证最小数据丢失。RDB 文件不会被忽略,但仅作为兜底或人工干预时的备选。
- 恢复逻辑是:先尝试载入 AOF;若 AOF 损坏或不存在,再 fallback 到 RDB
- 这意味着 AOF 的完整性校验(如
aof-load-truncated配置)和定期重写更关键 - 线上建议至少开启一种,强烈推荐 AOF + RDB 组合:AOF 保数据,RDB 做周期性轻量备份










