«

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 时短暂占用 持续追加,刷盘有开销

五、各自适合场景

六、混合持久化

Redis 4.0+ 支持混合模式:AOF 重写时把当前全量数据写成 RDB 格式放在文件头,之后增量命令追加在后面。重启先加载快照再重放少量增量,兼得恢复速度与数据安全:

aof-use-rdb-preamble yes

七、常见误区

  1. 以为开了 RDB 就零丢失,两次快照之间宕机仍会丢数据;
  2. 只用 save 阻塞命令,大实例时主线程卡顿;
  3. AOF 用 always 追求绝对安全,写性能明显下降;
  4. 只配持久化不做异地备份,磁盘损坏照样丢;
  5. 忽略 AOF 重写,日志无限膨胀占用磁盘。

八、运维检查命令

redis-cli info persistence

查看 rdb_last_save_time、aof_last_write_status、loading 等指标,确认持久化是否正常、有无上次写失败。

九、总结

RDB 是全量快照,文件小、恢复快但可能丢一段时间数据;AOF 是命令日志,数据更安全但文件大、恢复慢。生产建议 AOF 为主、RDB 做冷备,或开启混合持久化;按业务对丢失容忍度选择策略,并定期异地备份与监控持久化状态。

标签: Redis 持久化 RDB AOF