筛选页参数换一下顺序内容完全一样,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
接着在
边
剩下的就是观
察
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
别只看报错消失,验证要多做一步。归一化后六份合成一份,命中率从三成回到七成,筛选页的回源请求少了六成。
补一句。参数顺序不该影响内容,缓存键里先排序再哈希,命中率会明显好看。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
