先给结论:不要从最外层缓存开始逐层清,而要先确定“哪个版本才是期望版本”,再沿着请求路径从离用户最近的一层往回比对,找出第一处与期望版本不一致的缓存层。下面用一个假设情境把决策过程走一遍。
假设某域名注册服务的帮助中心要下线一批过时的转入说明,但其中“转入前需要准备什么”仍然有效,于是保留该段并更新了页面。发布后出现异常:同一路径在部分网络环境下返回旧版,在另一些环境下返回新版,还有的返回一个既非旧版也非新版的中间状态。
这种分叉通常不是单一故障,而是多层缓存各自持有不同时间点的副本。关键动作是先固定一个可复现的请求条件,包括完整路径、查询串、请求头中的缓存相关字段,以及是否带 Cookie。条件固定后,版本差异才有比较意义。
期望版本必须来自源站或权威来源,而不是来自某一层缓存的返回。可行做法是绕过缓存直接取源,或让源站返回一个可识别的标记。只有确认了期望版本,才能判断各层是“旧”“新”还是“被改写”。
比对顺序建议从离用户最近的一层开始,逐层向源站推进。这样做的原因是:如果最外层就已经是旧版,问题可能不在更内层;如果最外层是新版而中间层是旧版,则问题集中在中间层。顺序错了会把时间浪费在无关层上。
版本不一致常见有三类原因,证据不同,处理方向也不同。
需要提醒的是,某一层返回旧版并不自动证明该层就是根因。它也可能是忠实缓存了上游给的旧内容。抓取量或请求量突然变化同样不能单独证明处理正确,因为流量波动、探测行为或临时故障都可能造成类似现象。
具体动作:为同一路径构造两组请求,一组带强制回源的请求头,一组不带,然后分别记录各层返回的版本标识。如果带强制回源的请求稳定返回期望版本,而不带的请求在某层出现旧版,那么问题就在该层的缓存策略或清除范围,下一步应检查该层的缓存规则和清除记录,而不是继续改动源站内容。
反过来,如果强制回源也出现旧版,说明源站或构建产物本身存在多版本,下一步应转向发布流程和产物校验,缓存层只是放大了问题。
假设例子:某次发布后,A 网络返回旧版、B 网络返回新版。若强制回源在两组网络下都返回新版,则可推断差异来自缓存而非源站;此时优先核对缓存规则,而不是重新发布内容。
当旧内容、旧系统或旧合作关系需要退出时,不必把所有相关资源一并清除。判断依据是:该资源是否仍被有效页面引用、是否仍有外部链接指向、是否仍承担跳转职责。
需要区分的是,抓取限制类配置不等于可靠的索引移除,站点地图也不保证收录。若退出动作涉及索引层面,应把这些手段与缓存清除分开评估,不要用清缓存的结果去推断索引状态。
把以上步骤连起来看,定位一致性问题的核心不是“清得够不够多”,而是先固定期望版本,再按由外到内的顺序找到第一处偏差,最后用强制回源这一动作区分缓存问题与源站问题。走完这一步,后续该改缓存规则还是改发布流程,就有了明确依据。