刷新缓存的四种方式,代价差很多

按 URL 刷、按目录刷、按标签刷、全站刷——生效速度和对命中率的破坏程度完全不同。全站刷新往往是最坏的选择。

7 分钟缓存与命中
刷新缓存的四种方式,代价差很多

要点

能按标签刷就不要按目录刷,能按目录刷就不要全站刷。全站刷新会让所有节点同时回源,可能直接把源站压垮。

本文目录
  1. 01四种刷新方式
  2. 02全站刷新的真实风险
  3. 03实践建议

四种刷新方式

方式影响范围典型生效时间对源站的冲击
按 URL单个资源秒级几乎没有
按目录前缀该前缀下全部资源秒到分钟中等
按标签打了同一标签的资源秒级可控
全站所有缓存分钟级很大

按 URL 精确刷新最安全,但发版时改动的文件可能成百上千,逐个刷不现实。按标签是折中:在响应头里给资源打标签(如某个商品的所有相关页面共用一个标签),改动时按标签批量失效。

全站刷新的真实风险

全站刷新之后,所有边缘节点的缓存同时清空。接下来涌入的每一个请求都会未命中、都要回源——这就是缓存雪崩。

容易被低估的一点

平时命中率 95% 的站点,源站只承担 5% 的流量。全站刷新后的那几分钟,源站要承担接近 100% 的流量——相当于瞬间放大二十倍。很多「刷新缓存后网站挂了」的事故就是这么来的。

如果厂商支持,优先用「标记过期」而不是「删除」:前者配合 stale-while-revalidate,让旧副本在后台更新期间继续服务,源站压力平摊开。

实践建议

  • 静态资源用内容哈希文件名(如 app.a1b2c3.js),改了就是新 URL,根本不需要刷新;
  • 需要刷新的通常只有 HTML 入口和 API 响应,量很小,按 URL 刷就够;
  • 选厂商时确认是否支持按标签刷新,这个能力在内容关联复杂的站点上省很多事;
  • 把全站刷新当成应急手段,而不是发版流程的一环。

在你的网站验证

厂商对比对比各家的刷新粒度与生效速度