这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
随机过期时间
解决方案概述
核心思路:
- 在固定过期时间基础上增加随机值
- 让 key 分散过期,避免同时失效
设计流程
解决方案概述
- 步骤 1:读取、刷新或失效缓存数据
- 步骤 2:按命中、未命中和异常 key 处理读取与回源
- 步骤 3:按本节策略读取、写入缓存并处理过期或失效
- 步骤 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 分钟考虑因素:
- 分散效果:范围越大,分散越好
- 数据新鲜度:范围越大,数据可能越旧
- 业务容忍度:根据业务可接受的旧数据程度调整