Redis RDB、AOF 与恢复
解释 Redis RDB 快照、AOF 日志、fsync 与恢复边界,并区分持久化、备份和业务事实源三种不同职责。
#concept
#growing
#backend
#ops
#redis
[!info] related notes
- 所属 MOC:BodySense Redis 从零到一课程 MOC
- 前置概念:Redis
- 易混淆概念:关系型数据库
- 对应课程:BodySense Redis 第 7 课
Redis RDB、AOF 与恢复
一句话定义
Redis 可以通过 RDB 时间点快照、AOF 写操作日志或二者组合,在进程重启后恢复内存状态;这提升 durability,但不自动把 Redis 变成适合所有长期业务事实的 system of record。
RDB
periodic point-in-time snapshot
→ compact snapshot file
→ restart restore
优点:
- 文件紧凑;
- 适合备份 / 全量恢复;
- 恢复路径清晰。
代价:
- 两次快照之间的最近写入可能丢失;
- 生成快照会带来 fork / I/O / memory 成本。
AOF
append mutations
→ persistent log
→ restart replay
比周期快照提供更细的恢复窗口,但要承担 append I/O、fsync、AOF rewrite、文件增长和恢复时间。
appendfsync
always
→ durability 更强,I/O 成本更高
everysec
→ 常见性能 / durability 折中
no
→ 更多交给 OS 刷盘,丢失窗口更不确定
Persistence ≠ Backup
Persistence
→ Redis 自己重启后恢复最近状态
Backup
→ 独立时间点副本,可应对误删、文件损坏、灾难
错误删除也可能被 AOF 忠实记录,因此 AOF 不能替代备份。
Persistence ≠ System of Record
是否做事实源取决于:
- 事务边界;
- 关系约束;
- 历史审计;
- 查询模型;
- replay/recovery;
- 数据治理;
- domain ownership。
“开启 AOF”只说明 Redis 自身可以更好恢复,不等于 BodyState、Diagnosis、Runtime Event、Job Ledger 就应该迁成 Redis-only。
BodySense
当前生产 Redis 使用:
appendonly yes
appendfsync everysec
persistent volume
这降低重启导致的状态损失,但仍应分别验证 Session、Refresh rotation/replay、Rate Limit 等 Key 的恢复语义,而不是只验证普通 Key 能否回来。