API 缓存策略设计(免费版)
输入
| 字段 | 必填 | 说明 |
|---|---|---|
| now / created_at / ttl | 是 | 当前时刻、写入时刻、基础TTL(秒) |
| jitter_pct | 否 | 抖动比例(默认10%),防雪崩 |
| db_found | 是 | 回源DB是否查到数据 |
| is_hot_key | 否 | 是否热点key |
输出
是否过期 + 抖动后TTL + 处置策略 + Cache-Control头
三大故障与对策
- 穿透:查不存在的数据,缓存永远不命中→缓存空值(短TTL,如正常10%)。
- 击穿:某个热点key失效瞬间大量请求打到DB→互斥锁,只放一个请求回源重建。
- 雪崩:大批key同时失效→TTL加随机抖动,错开失效时刻。
硬性规则
- now≥created_at+ttl 即过期,恰好到期算过期。
- 空值缓存TTL必须显著短于正常值,并对空值打标记防与真实空混淆。
- 抖动后TTL不得为负。
- 写操作要主动失效相关缓存,避免脏读。
示例
base_ttl=60、抖动10% → 最终TTL落在[54,66]
DB查无此用户 → CACHE_NULL 空值缓存
秒杀商品key(热点)失效 → MUTEX_REBUILD 互斥重建