首页/数据/Redis 进阶速查/丢失窗口计算与业务对账
持久化56 条

丢失窗口计算与业务对账

丢失窗口由持久化组合决定:AOF everysec 约 1 秒、按时间快照则等于两次快照间隔内所有写入;把窗口写进业务 SLA 并准备对账与补数方案。

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

丢失窗口怎么算

任何持久化方案都有丢失窗口,区别只在窗口有多长。使用 AOF 且刷盘策略为每秒一次时,窗口约等于 1 秒;只靠 RDB 快照时,窗口等于规则设定的最大间隔内的全部写入;用不保存的方式强制停机,本次停机前的增量就全部放弃。把窗口长度明确写进业务承诺,并准备好对账与补数手段,比反复争论「到底会不会丢」更有实际价值。

基本信息

计算方式丢失窗口等于刷盘周期或快照间隔
常见取值appendfsync everysec 约 1 秒
兜底手段消息队列补数、数据库对账、全量校准
核对命令CONFIG GET save 与 appendfsync
风险信号rdb_changes_since_last_save 长期偏高

典型使用场景

  • 上线前与业务方确认可接受的数据丢失窗口
  • 设计对账任务:按业务主键定期比对缓存与数据库
  • 事故复盘时估算实际丢失量级,决定是否需要补数
  • 选择持久化组合时,把窗口长度作为决策依据
  • 演练突然宕机场景,验证恢复流程与业务影响

现状核对

现状核对
redis-cli CONFIG GET save
redis-cli CONFIG GET appendfsync
redis-cli INFO persistence | grep -E 'rdb_last_save_time|rdb_changes_since_last_save'
redis-cli INFO persistence | grep -E 'aof_enabled|aof_last_write_status|aof_last_bgrewrite_status'
redis-cli INFO persistence | grep -E 'aof_last_write_status'   # 刷盘是否正常

方案与窗口对照

方案丢失窗口特点
AOF everysec约 1 秒性能与安全的常用折中
AOF always接近为零(单机故障下)每条命令刷盘,性能代价最高
仅 RDB 快照最长等于规则间隔配置简单,对写入量敏感
不保存强制停机本次停机前全部增量仅用于抢险场景
很多业务真正依赖的不是「一条都不丢」,而是「能重建」:先明确每类键的上游来源与重建路径,往往比一味加码持久化配置更有效,也更容易在成本上向业务交代清楚。
丢失窗口只是单机维度。发生主从切换时还会额外丢掉尚未同步到新主库的那部分写入,因此对业务的承诺应当把持久化窗口与切换窗口分开写清楚,分别给出量级与对应的补偿措施,而不是笼统写一个数字。
评估方式可以很朴素:找出写入量最大的那类业务,算出它在这个窗口内会产生多少条记录,再问业务方能不能接受重放或补录这么多数据。这个数字通常比任何参数推导都更有说服力。

易错点

  • 把缓存数据当账本数据用,事先不区分每类键的可重建性,事故时无法判断影响范围
  • 只做纸面计算,不演练丢 1 秒或丢 10 分钟时业务的实际表现
  • 依赖 AOF 却把刷盘策略设为不由 Redis 控制的模式,实际窗口远超预期
  • 缺少对账与补数机制,恢复后只能人工比对,耗时不可控

数据来源与参考

  • Redis 官方文档:持久化能力边界说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌