CDN缓存标签与精细刷新:清除缓存不再“一刀切”

去年一个客户,每次更新内容都全量刷新缓存。结果命中率从85%直接跌到40%,源站带宽瞬间飙上去。他说:“我知道全量刷新伤命中率,但不刷用户看不到新内容啊。”
我说:“缓存标签了解一下。”
CDN默认的URL和目录刷新是全量操作——要么清掉一个文件的缓存,要么清掉整个目录。缓存标签的精细化刷新方式,可以按内容类型、业务模块等维度精准删除缓存,不影响其他内容。
01 两种刷新的代价
URL刷新:删除单个文件的缓存。精准,但业务更新涉及几十上百个文件时,手动提交不现实。
目录刷新:清除整个目录下所有文件的缓存。简单粗暴,但会导致大量缓存被清空,回源请求激增,源站压力陡增。
那家客户用的就是目录刷新。每次更新几篇文章,把整个/news/目录刷新一遍,旧缓存全清,命中率自然跌得厉害。
02 缓存标签:第三种选择
缓存标签的精细化刷新方式,只需给一批缓存数据打上相同标签,更新时针对标签一次性刷新即可。
工作原理:
给缓存内容打标签(如
type:news、module:homepage)更新内容时,提交对应的缓存标签
CDN节点只清除带该标签的缓存,其他内容不受影响
阿里云CDN提供了RefreshObjectCacheByCacheTagAPI接口,提交缓存标签即可触发刷新。腾讯云和华为云有类似能力。这是目前最精细化的缓存管理方式。
03 标签策略怎么设计
按内容类型分:static:img、static:css、dynamic:api
按业务模块分:module:homepage、module:product、module:news
按更新时间分:按日、按周等维度
好的标签策略,能让刷新操作精确定位到需要更新的内容,不影响其余部分。
04 先刷新再预热
内容更新时,标准流程是先刷新、再预热。刷新清除旧缓存,预热把新内容主动推送到边缘节点。两者配合,命中率基本不受影响。
写在最后
那家客户后来改用缓存标签刷新:更新文章只刷type:news标签,其他标签的缓存不动。命中率稳定在80%以上,源站压力也下来了。
全量刷新是最后的手段,缓存标签才是日常更新的正确方式。你的CDN,还在一刀切吗?