随机过期时间

解决方案概述

核心思路

  • 在固定过期时间基础上增加随机值
  • 让 key 分散过期,避免同时失效
设计流程
解决方案概述
  1. 步骤 1:读取、刷新或失效缓存数据
  2. 步骤 2:按命中、未命中和异常 key 处理读取与回源
  3. 步骤 3:按本节策略读取、写入缓存并处理过期或失效
  4. 步骤 4:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。

效果对比

固定过期时间:
14:00 写入 10000 个 key,都设置 3600 秒过期
15:00 10000 个 key 同时过期 ❌

随机过期时间:
14:00 写入 10000 个 key,基础 3600 秒,随机±300 秒
实际过期时间分布:
- 59 分过期:约 800 个 key
- 60 分过期:约 3000 个 key
- 61 分过期:约 3000 个 key
- 62 分过期:约 800 个 key
- ...分散在 55-65 分钟之间 ✅

结果:没有明显的过期高峰

当前技术架构

练习

练习 1

为什么缓存过期时间要加上随机值?随机范围如何设置?

参考答案 (2 个标签)
缓存雪崩 随机过期

答案

加随机值的原因

  • 避免大量 key 同时过期
  • 让过期时间分散,形成平缓的过期曲线
  • 防止外部 API 在某一时刻承受过大压力

随机范围设置原则

推荐:基础过期时间的 5%-10%

示例:
- 基础过期 1 小时(3600 秒)
- 随机范围±5 分钟(±300 秒)
- 实际过期时间:55-65 分钟

考虑因素

  1. 分散效果:范围越大,分散越好
  2. 数据新鲜度:范围越大,数据可能越旧
  3. 业务容忍度:根据业务可接受的旧数据程度调整