先承认一个前提:多层缓存下,不同角色看到的“版本”本来就可能不同,这不一定代表站点出错。要定位一致性问题,先要确定分歧发生在哪一层缓存,再用同一把尺子去核对。常见的做法是:固定一个可复现的请求条件(URL、UA、Cookie 状态),逐层剥离缓存,看内容在哪一层开始出现差异。
多层缓存通常包括浏览器缓存、CDN 边缘节点、反向代理(如 Nginx 的 proxy_cache)、应用层对象缓存,以及数据库查询缓存。判断一致性问题,先要区分两种条件:
这两种条件对应不同的排查动作。命中不一致时,动作是检查各层的缓存键(cache key)是否包含版本、语言、登录态等变量,以及各层 TTL 是否差异过大;回源不一致时,动作是检查应用是否读取了不同的数据源、是否有读写分离延迟、是否同一请求被分配到不同逻辑分支。
多个角色对同一事实有不同理解时,先把分歧写成可以核对的项目,而不是争论“谁看到的对”。一个可操作的清单:
Age、Cache-Control、X-Cache、Via、ETag、Last-Modified,这些字段能提示命中了哪一层以及副本的新旧。完成这一步后,通常能得出一个明确结论:差异从哪一层开始出现。这个结论直接决定下一步找谁处理——CDN 配置、反向代理规则、应用缓存逻辑,还是数据同步。
假设某商品页在 A 节点显示价格 100,在 B 节点显示价格 120,源站数据库当前值为 120。按上面的方法核对:
Age 很大、X-Cache 显示命中,说明 A 返回的是旧副本,问题在缓存过期或主动刷新未覆盖该节点。这个例子的意义在于:同样的“版本不一致”现象,可能指向完全不同的修复动作。先确定差异起点,再决定是清理缓存、调整缓存键,还是修数据同步。
有两种例外需要提前排除,否则会在缓存层空耗时间:
另外,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录;这些与缓存一致性是不同层面的问题,不要混在同一个排查里。定位缓存一致性时,重点始终是“同一请求条件下,差异从哪一层开始”。
定位完成后,建议保留一份最小记录:请求条件、各层响应头、正文关键片段、时间戳、差异起点。这样做的实际作用是,下次再出现类似分歧时,可以先用同一份记录核对,而不是重新争论。对提高百度收录而言,缓存一致性问题的价值不在于“清一次缓存”,而在于让后续的抓取与索引判断建立在稳定、可复现的版本之上。