缓存键决定命中边界
缓存键是 CDN 判断「这两个请求是不是同一份内容」的依据,通常由主机名、路径与全部或部分查询参数组成。默认包含全部参数最安全,但营销参数、统计参数会让同一文件被拆成多份缓存,命中率大幅下降。合理做法是把无业务含义的参数忽略掉,同时确保版本号、规格等真正影响内容的参数参与区分。
基本信息
| 默认组成 | 主机名 + 路径,多数产品默认包含全部查询参数 |
|---|---|
| 可忽略项 | 统计、渠道、营销等无内容影响的参数 |
| 必须保留 | 版本号、语言、尺寸等会改变内容的参数 |
| 验证方式 | 用带参与不带参的请求分别观察命中状态 |
| 风险 | 忽略过宽会让不同内容互相覆盖 |
典型使用场景
- 推广链接带 utm 参数导致命中率骤降,需要配置忽略
- 图片服务用尺寸参数返回不同图,参数必须保留
- 接口按版本号返回不同结构,版本参数要参与缓存键
- 出现内容串台(A 用户的响应给了 B),排查缓存键是否过宽
- 大促前复查缓存键配置,避免临时参数把缓存打散
对比参数对命中的影响
对比参数对命中的影响
curl -sI 'https://cdn.example.com/a.js?utm_source=x' | grep -i -E 'x-cache|age'
curl -sI 'https://cdn.example.com/a.js' | grep -i -E 'x-cache|age'
# 若两次都命中且 Age 接近,说明参数已被忽略
# 若一次 MISS 一次 HIT,说明参数进入了缓存键参数处理建议
| 参数类型 | 处理方式 | 原因 |
|---|---|---|
| 统计与渠道参数 | 忽略 | 不影响内容,只会拆散缓存 |
| 版本号 | 保留 | 不同版本内容不同 |
| 语言与地区 | 保留 | 影响返回内容 |
| 随机数 | 忽略或在前端移除 | 命中率杀手 |
忽略参数过多会把不同内容视为同一资源,出现内容互相覆盖;上线前要用带参与不带参的组合实测,而不是只看文档示例。
缓存键的组成与忽略规则会直接影响命中率与回源量,调整后应在监控上看命中率曲线变化,再用抽样验证实际行为。