双十一和双十二两个活动页共用一套模板,用户打开 A 活动看到的是 B 活动的 199 元,刷新几次又变回来,两个活动的订单混在一起。乍看像缓存或者权限的锅,追下去往往不是。
curl -sI "https://example.com/act?id=88" | grep -i x-cache curl -s "https://example.com/act?id=88" | grep -o '199\|299'
追下去是这么回事:缓存键只取了路径和 Host,两个活动都走 /act 这个地址,靠 query 区分,而 CDN 配置里把 query 从缓存键里去掉了,先回源的页面被复用。
「缓存键缺活动 ID」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
具体做法是,把活动 ID 加进缓存键,或者给每个活动单独的路径;活动配置改价时按活动 ID 精确刷新,别整站刷;用两个活动页交替请求十次,确认返回的价格不会串。
验收就看一点,两个活动页各自返回自己的价格,连续刷新十次都不串。
