首页/数据/Redis 进阶速查/持久化方案:先定可容忍丢失量
持久化56 条

持久化方案:先定可容忍丢失量

选型从业务能容忍多少数据丢失出发:纯缓存可关持久化;秒级丢失可接受用 AOF everysec;要求更严则评估 always 的写放大与磁盘能力。

Redis 进阶速查数据更新于 2026-10-13

持久化方案怎么定

选持久化方案的正确起点不是「用 RDB 还是 AOF」,而是先回答一个问题:这套 Redis 的数据丢了会怎样,业务最多能容忍丢多少。纯缓存可以接受全丢,追求速度而不开持久化;会话、队列、计数这类数据通常能接受秒级丢失,用 AOF everysec 加定期快照;账务、订单状态要求尽量不丢,则在 everysec 基础上叠加多副本与更严格的运维约束。方案是丢数据代价与资源成本之间的取舍。

基本信息

判断起点可容忍丢失量(全丢 / 秒级 / 尽量不丢)
常规组合AOF everysec 加定期 RDB,是覆盖多数业务的安全默认
成本项磁盘容量与 IOPS、fork 带来的内存峰值、恢复耗时
配套要求主从多副本、异地备份、可执行的恢复演练
反模式只开 RDB 却要求零丢失,或只挂副本而不配任何持久化

按业务分档

  • 纯缓存:关闭持久化或只留低频 RDB 做冷备,重建成本由回源承担
  • 弱一致队列:AOF everysec 足够,失败重投与幂等设计比持久化更重要
  • 会话与登录态:AOF everysec 加正常 TTL,丢秒级数据的后果是少量用户重新登录
  • 计费类计数:AOF everysec 加多副本,并周期性把 Redis 计数对账落库形成持久事实
  • 强一致账务:不要把 Redis 当唯一存储,持久化只作为加速层,真实依据落在关系数据库

核对现状

核对现状
redis-cli CONFIG GET appendonly            # 是否开启 AOF
redis-cli CONFIG GET appendfsync           # 刷盘策略
redis-cli CONFIG GET save                  # 快照条件
redis-cli INFO persistence                 # 一次性看全持久化状态
redis-cli INFO replication | grep -E 'role|connected_slaves'   # 副本是否到位
df -h /var/lib/redis                       # 磁盘余量是否够两份文件

场景对照表

业务要求建议方案剩余风险
纯缓存可重建关闭持久化或仅 RDB 冷备重启后缓存冷启动,需限流预热
可丢秒级数据AOF everysec 加定期 RDB断电可能丢约 1 秒写入
尽量不丢且性能优先AOF everysec 加多副本主从切换窗口内仍可能丢失未同步写入
强持久化appendfsync always 并压测验证吞吐下降,仍需异地备份防整机故障
持久化只解决单机重启问题,不解决机器彻底损毁:快照与 AOF 都在本机磁盘上,宿主机不可用时会一起消失。完整的方案必须包含副本与异地备份,并且定期做恢复演练,演练要覆盖真实加载来源。
恢复时间也要纳入选型:RDB 恢复是直接加载,几十 GB 数据可能几分钟;AOF 恢复需要重放命令,同样数据量可能慢数倍。对可用性要求高的业务,恢复时间目标会直接决定「AOF 还是 RDB 为主」。

易错点

  • 把「开了 AOF 就不会丢」当结论:everysec 在断电场景仍有约 1 秒窗口,对账与补偿逻辑必须按这个前提设计
  • 只关注持久化配置而忽略副本数量,单机磁盘损坏时持久化文件一起丢失,数据实际毫无冗余
  • always 档位上线前未压测,写入延迟成倍增长,业务侧表现为接口超时而不是存储报错,排查方向容易被带偏
  • 从未做过恢复演练,真出事时才发现 AOF 文件损坏、目录权限错误或备份文件从未成功生成,恢复流程无法成立

数据来源与参考

  • Redis 官方文档:持久化选型说明(RDB vs AOF)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌