Skip to content
Redis 持久化与性能治理 · 第 1 篇 / 共 4 篇
领域数据与中间件
专题Redis 专题
当前序列Redis 持久化与性能治理
阅读位置第 1 篇 / 共 4 篇当前专题第 3 个序列 / 共 7 个序列

Redis 持久化怎么选:RDB、AOF 和恢复速度之间的取舍

很多项目把 Redis 用作缓存后,会默认觉得“丢了就丢了”。但只要 Redis 上开始承载:

  • 分布式锁
  • 防重 token
  • 会话
  • 秒杀预热数据

持久化策略就不能再随便看了。

先说结论

可以先这样理解:

  • RDB 更像定期做快照
  • AOF 更像记录写命令日志
  • 想兼顾恢复和数据安全,很多场景会优先考虑 AOF 或混合持久化

更现实一点说:

  • 纯缓存,更容易接受 RDB
  • 状态型数据,更该认真评估 AOF
  • 大多数线上正式环境,往往不会只停留在“开没开持久化”,而是会一起看恢复窗口和性能影响

一、RDB 是什么

RDB 的核心思路是:

  • 在某个时间点把当前内存数据快照落盘

优点:

  • 文件更紧凑
  • 恢复速度通常更快
  • 适合做备份

代价:

  • 两次快照之间的数据可能丢失

所以它更适合:

  • 可接受一定时间窗口数据丢失
  • 更偏缓存型数据

它的另一个价值是:

  • 备份和冷恢复通常更直观

但在大实例上,做快照会涉及 fork,这会带来额外内存和短时系统压力。

二、AOF 是什么

AOF 的思路是:

  • 把写命令按追加日志方式记录下来

优点:

  • 数据安全性通常更好
  • 丢失窗口可以更小

代价:

  • 文件可能更大
  • 重写和恢复成本要关注

还要看 appendfsync 策略,因为它会直接影响:

  • 落盘时机
  • 丢失窗口
  • 写入延迟

三、AOF 也不是绝对安全

很多人会把 AOF 理解成“基本不丢”。
这不完全错,但也不能太乐观。

因为你最终仍然要看:

  • fsync 策略
  • 机器宕机时机
  • AOF 重写期间的系统压力

也就是说,AOF 是把丢失窗口压小,不是把风险变成零。

四、混合持久化为什么越来越常见

混合持久化可以粗略理解为:

  • 用 RDB 记录基线快照
  • 再叠加后续 AOF 增量

它的目标通常是兼顾:

  • 恢复速度
  • 持久化完整度

这也是为什么很多线上环境最终会偏向“不是只选 RDB 或只选 AOF”,而是组合使用。

五、怎么选更实用

更偏缓存

如果 Redis 主要就是普通缓存,且数据丢一点影响不大,RDB 往往已经够用。

更偏状态型数据

如果上面承载了:

  • 会话
  • 令牌
  • 业务中间状态

那就更应该认真看 AOF 和恢复策略。

尤其是这些场景:

  • 登录态和会话恢复
  • 防重 token
  • 秒杀预热和库存前置状态
  • 分布式协调状态

只要 Redis 里的东西一旦丢失会直接影响业务语义,就不能只用“缓存思维”去选。

六、恢复时间也必须一起看

持久化策略不是只看“丢不丢”,还要看“多久能起来”。

例如:

  • RDB 文件通常更紧凑,恢复更快
  • AOF 文件如果很大,重放恢复会更慢

所以线上真正要问的是两件事:

  • 最多能接受丢多少
  • 最多能接受恢复多久

七、一个常见误区

不是开了持久化就万事大吉。

还要关注:

  • 磁盘空间
  • 重写策略
  • 恢复时间
  • fork 带来的瞬时内存压力

尤其是大实例上,持久化和主从复制都可能带来额外内存压力。

再补一个很常见的坑:

  • 平时没演练恢复,真正故障时才发现文件太大、启动太慢、校验不过

八、一个更实用的判断顺序

可以这样选:

  1. Redis 上是否承载关键状态
  2. 最多可接受多大的数据丢失窗口
  3. 最多可接受多长恢复时间
  4. 当前实例规模是否会让 fork 和重写压力变得明显

这样选出来的策略,通常比只记“缓存用 RDB,状态用 AOF”更稳。

一句话总结

Redis 持久化本质上是在“性能、恢复速度、数据安全”之间做取舍。

如果只是缓存,RDB 往往够用;如果开始承载关键状态,就要认真看 AOF 和恢复窗口。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读Redis 内存、过期与淘汰策略适合把持久化、内存淘汰、大 Key 和热 Key 这类稳定性问题集中来看。Redis 专题 · Redis 持久化与性能治理同一序列 · 顺着当前主线继续读Redis 大 Key 和热 Key 怎么排查适合把持久化、内存淘汰、大 Key 和热 Key 这类稳定性问题集中来看。Redis 专题 · Redis 持久化与性能治理同专题其他序列 · 共享标签:选型对比Redis 数据结构怎么选适合把数据结构、典型场景、布隆过滤器和集群分片放在一起先打底。Redis 专题 · Redis 基础模型与高频场景同专题其他序列 · 共享标签:选型对比Redis Stream 和 List 队列怎么选适合把 Stream、Bitmap、限流和延迟队列这些进阶能力集中来看。Redis 专题 · Redis 进阶数据模型与业务场景跨专题关联 · 同场景:方案选型半同步复制和异步复制怎么选适合把 next-key lock、一致性读、复制延迟和分库分表边界放回同一条一致性主线上判断。MySQL 专题 · MySQL 事务、锁与高可用边界跨专题关联 · 同场景:方案选型分词器、Tokenizer 和 IK 到底怎么选适合把分词、复杂查询和深分页放到一起深入看。Elasticsearch 专题 · Elasticsearch 查询与分析细节
继续阅读Redis 持久化与性能治理当前序列第 1 篇 / 共 4 篇当前专题第 3 个序列 / 共 7 个序列
往前看
上一序列Redis 缓存一致性与更新策略从第 1 篇开始:Redis 缓存更新策略
往后看
下一篇Redis 内存、过期与淘汰策略继续当前序列下一章下一序列Redis 进阶数据模型与业务场景从第 1 篇开始:Redis String、List、Set、ZSet 怎么做业务建模

把零散经验整理成可查、可复用、可持续更新的企业级知识门户