两种持久化各自的特点
RDB 是周期性快照,文件紧凑、恢复快,适合做备份与冷启动;AOF 追加记录写命令,按 appendfsync 策略决定丢数窗口,写入更安全但文件更大。两者可以同时开启,用混合方式兼顾恢复速度与丢数窗口。
怎么选与怎么配
对丢数容忍度低的业务开启 AOF 并把 appendfsync 设为 everysec(丢数窗口约 1 秒);以缓存为主、故障后能回源重建的数据只开 RDB 就够。开启 aof-use-rdb-preamble 后,AOF 重写会把前半段写成 RDB 格式,实例加载更快。重启时若开启了 AOF 会优先加载它,否则加载 RDB 文件。
基本信息
| RDB | save 触发点或手动 BGSAVE,fork 子进程写盘,主进程继续服务 |
|---|---|
| AOF | appendonly 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 10000 | 60 秒内一万次写就快照 | 频率高会影响 fork 与延迟 |
| aof-use-rdb-preamble | 重写时用 RDB 前导 | 加载更快,体积更小 |
持久化是可用性配置的一部分:副本节点也建议开启,否则主节点故障切换后新主没有本地数据文件可用,只能从空实例开始恢复。
fork 与写时复制在写密集时会造成延迟抖动,快照频率要结合内存规模评估;AOF 重写期间新旧文件并存会额外占用磁盘,容量要预留出重写空间。