Redis 持久化选型:RDB vs AOF 深度对比

Redis 持久化要解决什么问题

Redis 是内存数据库,重启后数据会丢。持久化就是把内存数据落到磁盘,重启时再加载回来。Redis 提供两种机制:RDB(快照)AOF(追加日志),以及 Redis 7 之后的混合模式。选哪个,取决于你能接受丢多少数据。

一、RDB:某一时刻的全量快照

RDB 在指定触发条件下,把当前内存全量数据压缩成二进制文件 dump.rdb

save 900 1        # 900秒内至少1次修改
save 300 10       # 300秒内至少10次修改
save 60 10000

优点:文件紧凑、恢复极快、适合备份和灾备。
缺点:两次快照之间宕机,中间的数据全丢(可能丢几分钟)。

二、AOF:每一条写命令都记日志

AOF 把每个写操作以协议格式追加到文件,重启时”重放”命令恢复数据。

appendonly yes
appendfsync everysec   # 每秒刷盘,兼顾性能与安全

appendfsync 三种策略:

策略 数据安全 性能
always 不丢 最差
everysec 最多丢1秒 折中(推荐)
no 看系统 最好

优点:数据丢失窗口小(默认最多 1 秒)。
缺点:文件大、恢复慢(要重放全部命令)。AOF 会定期 bgrewrite 压缩。

三、混合持久化(Redis 7 推荐)

Redis 7 起默认开启混合:AOF 文件前半段是 RDB 全量,后半段是增量命令。启动时先加载 RDB 再重放增量,又快又安全

aof-use-rdb-preamble yes

四、怎么选

  • 纯缓存、丢了无所谓:可以关持久化,性能最好。
  • 能接受丢几分钟:只用 RDB,简单够用。
  • 不能丢数据(如会话、排行榜):AOF(everysec)+ 混合模式。
  • 既要恢复快又要少丢:RDB + AOF 混合,这是当前最主流的配置。

五、运维注意

  • RDB 的 bgsave 会 fork 子进程,内存大时可能短暂卡顿(写时复制)。
  • AOF 文件过大要关注 auto-aof-rewrite 阈值。
  • 主从架构下,从库重启也会触发加载,注意加载期间的连接超时。

小结

没有”最好”的持久化,只有”最适合业务”的。绝大多数生产环境直接开混合模式即可:恢复快、丢失少、运维省心。

上一篇 Linux 服务器安全加固 12 条 Checklist
下一篇 TypeScript 类型体操:从入门到实用技巧