Redis 持久化 RDB 与 AOF 对比
时间:2026-11-15 07:21 作者:emer 分类: 无
Redis 持久化 RDB 与 AOF 对比
一、为什么需要持久化
Redis 数据默认在内存里,进程重启或宕机就全丢。持久化就是把内存数据写到磁盘,重启后能恢复。Redis 提供两种机制:RDB 快照和 AOF 日志,二者可单独用也可同时开。
二、RDB 快照
RDB 在某个时刻把全量内存数据拍成二进制快照,存成 dump.rdb 文件。
# redis.conf
save 900 1 # 900秒内至少1次写则触发
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
触发方式:save 命令阻塞主线程,bgsave fork 子进程后台写。重启时直接加载 rdb。
三、AOF 日志
AOF 把每条写命令追加到日志文件,重启时重放命令重建数据。
appendonly yes
appendfilename appendonly.aof
appendfsync everysec # 每秒刷盘,兼顾性能与安全
刷盘策略:always(每条都刷,最安全最慢)、everysec(默认,折中)、no(交给操作系统)。
四、核心对比
| 维度 | RDB | AOF |
|---|---|---|
| 保存形式 | 某时刻全量二进制快照 | 逐条写命令日志 |
| 文件大小 | 小,压缩二进制 | 大,命令文本 |
| 恢复速度 | 快 | 较慢,需重放命令 |
| 数据安全 | 可能丢两次快照间数据 | 丢的数据更少(最多1秒) |
| 对性能影响 | bgsave fork 时短暂占用 | 持续追加,刷盘有开销 |
五、各自适合场景
- RDB:做定时备份、灾备,能快速恢复;对数据丢失容忍度较高的缓存;
- AOF:要求高可靠性,尽量少丢数据,把 Redis 当准数据库使用;
- 生产常见做法:两者同时开启,AOF 保证近期数据不丢,RDB 用于快速冷备和灾难恢复。
六、混合持久化
Redis 4.0+ 支持混合模式:AOF 重写时把当前全量数据写成 RDB 格式放在文件头,之后增量命令追加在后面。重启先加载快照再重放少量增量,兼得恢复速度与数据安全:
aof-use-rdb-preamble yes
七、常见误区
- 以为开了 RDB 就零丢失,两次快照之间宕机仍会丢数据;
- 只用 save 阻塞命令,大实例时主线程卡顿;
- AOF 用 always 追求绝对安全,写性能明显下降;
- 只配持久化不做异地备份,磁盘损坏照样丢;
- 忽略 AOF 重写,日志无限膨胀占用磁盘。
八、运维检查命令
redis-cli info persistence
查看 rdb_last_save_time、aof_last_write_status、loading 等指标,确认持久化是否正常、有无上次写失败。
九、总结
RDB 是全量快照,文件小、恢复快但可能丢一段时间数据;AOF 是命令日志,数据更安全但文件大、恢复慢。生产建议 AOF 为主、RDB 做冷备,或开启混合持久化;按业务对丢失容忍度选择策略,并定期异地备份与监控持久化状态。