筛选页参数换一下顺序内容完全一样,CDN 按原始字符串算缓存键,两种顺序各存一份。后来又出现第三种组合,节点上同一个页面存了六份,命中率掉到三成。

一开始怀疑是「没有做参数排序归一化」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。缓存键直接用完整查询字符串。还有一种是前端生成参数顺序不固定。

另外,命中率报表按 URL 统计,看不出重复。

动手时先用两种顺序请求对比缓存状态

curl -sI 'https://www.example.com/list?color=red&size=m' | grep -i x-cache

随后换顺序再请求一次

curl -sI 'https://www.example.com/list?size=m&color=red' | grep -i x-cache

接着在

边

剩下的就是观

察

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

别只看报错消失,验证要多做一步。归一化后六份合成一份,命中率从三成回到七成,筛选页的回源请求少了六成。

补一句。参数顺序不该影响内容,缓存键里先排序再哈希,命中率会明显好看。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189