首页/数据/NoSQL 速查/Redis 持久化:RDB 与 AOF
选型与架构50 条

Redis 持久化:RDB 与 AOF

RDB 是周期性快照,文件紧凑、恢复快;AOF 追加写命令,按 appendfsync 策略控制丢失窗口,Redis 7 采用多文件 AOF 并通过重写控制体积。两者可同时开启,用混合方式兼顾恢复速度与丢数窗口。

NoSQL 速查数据更新于 2026-10-13

两种持久化各自的特点

RDB 是周期性快照,文件紧凑、恢复快,适合做备份与冷启动;AOF 追加记录写命令,按 appendfsync 策略决定丢数窗口,写入更安全但文件更大。两者可以同时开启,用混合方式兼顾恢复速度与丢数窗口。

怎么选与怎么配

对丢数容忍度低的业务开启 AOF 并把 appendfsync 设为 everysec(丢数窗口约 1 秒);以缓存为主、故障后能回源重建的数据只开 RDB 就够。开启 aof-use-rdb-preamble 后,AOF 重写会把前半段写成 RDB 格式,实例加载更快。重启时若开启了 AOF 会优先加载它,否则加载 RDB 文件。

基本信息

RDBsave 触发点或手动 BGSAVE,fork 子进程写盘,主进程继续服务
AOFappendonly yes 记录写命令,appendfsync everysec 时丢数窗口约 1 秒
混合aof-use-rdb-preamble yes,重写时前半段用 RDB 格式
加载顺序开启 AOF 时优先加载 AOF,否则加载 RDB
运维命令BGSAVE、BGREWRITEAOF、redis-check-aof --fix

配置片段

配置片段
# redis.conf 关键项
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes

save 3600 1
save 300 100
save 60 10000

# 运行时操作
redis-cli BGSAVE        # 手动生成快照
redis-cli BGREWRITEAOF  # 重写 AOF,压缩体积
redis-cli INFO persistence  # 查看最近保存状态与重写进度

典型使用场景

  • 纯缓存服务:只开 RDB,故障后允许回源重建
  • 会话或队列类数据:开启 AOF 把丢数窗口压到秒级
  • 迁移与冷备:用 RDB 文件跨环境搬运
  • 磁盘紧张时:调低快照频率,或用 AOF 重写控制体积
  • 日常巡检:用 INFO persistence 确认最近保存时间与状态

配置权衡

配置含义权衡
appendonly yes开启 AOF文件更大,写入有额外开销
appendfsync everysec每秒刷盘丢数窗口约 1 秒,性能适中
appendfsync always每条命令刷盘几乎不丢数据,性能明显下降
save 60 1000060 秒内一万次写就快照频率高会影响 fork 与延迟
aof-use-rdb-preamble重写时用 RDB 前导加载更快,体积更小
持久化是可用性配置的一部分:副本节点也建议开启,否则主节点故障切换后新主没有本地数据文件可用,只能从空实例开始恢复。
fork 与写时复制在写密集时会造成延迟抖动,快照频率要结合内存规模评估;AOF 重写期间新旧文件并存会额外占用磁盘,容量要预留出重写空间。

易错点

  • fork 与写时复制在写密集时带来延迟抖动,快照频率要结合内存规模评估
  • AOF 重写期间新旧文件并存会占用额外磁盘,磁盘水位要预留重写空间
  • 副本节点不开持久化,主从切换后新主没有本地数据文件可用
  • 把 appendfsync always 当成默认必选项,会让写入性能明显下降,先看业务对丢数的容忍度

数据来源与参考

  • Redis Docs: Persistence
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌