CDN 缓存策略的核心概念
CDN 缓存策略决定了内容在边缘节点的存储时间和更新方式,直接影响用户体验和源站负载。合理的缓存策略可以最大化 CDN 的性能优势。
主要缓存策略
1. 基于 TTL(Time To Live)的缓存
TTL 是最基本的缓存控制机制,指定内容在 CDN 节点的缓存时间:
- 短 TTL(秒级):适用于频繁更新的内容,如新闻、股票数据
- 中等 TTL(分钟级):适用于偶尔更新的内容,如商品信息、用户资料
- 长 TTL(小时/天级):适用于很少变化的内容,如静态资源、图片、视频
设置方式:
httpCache-Control: max-age=3600 // 缓存 1 小时 Cache-Control: max-age=86400 // 缓存 1 天
2. 缓存键(Cache Key)配置
缓存键决定哪些请求被视为相同内容:
- 默认缓存键:基于完整 URL
- 自定义缓存键:可以包含或排除特定的请求头、查询参数
- 忽略查询参数:对于不影响内容的参数(如
?timestamp=xxx)可以忽略
示例:
- 完整 URL:
https://example.com/image.jpg?width=800&quality=90 - 忽略 quality:
https://example.com/image.jpg?width=800
3. 分级缓存策略
CDN 通常采用多级缓存架构:
- 边缘节点缓存:最接近用户,容量较小,响应最快
- 区域节点缓存:覆盖特定区域,容量中等
- 源站缓存:容量最大,作为最后保障
缓存查找顺序:边缘节点 → 区域节点 → 源站
4. 缓存预热(Cache Warming)
在内容正式发布前,提前将内容推送到 CDN 节点:
- 主动预热:通过 API 或管理控制台主动推送
- 被动预热:通过模拟用户请求触发缓存
- 适用场景:重大活动、新版本发布、热门内容
5. 缓存刷新(Cache Purging)
主动清除 CDN 节点的缓存内容:
- URL 刷新:清除特定 URL 的缓存
- 目录刷新:清除整个目录下的缓存
- 全站刷新:清除所有缓存(谨慎使用)
刷新方式:
- 立即刷新:立即清除缓存
- 软刷新:等待 TTL 过期后不再续期
高级缓存策略
1. 动态内容缓存
即使是动态内容也可以通过以下方式缓存:
- 协商缓存:使用 ETag 或 Last-Modified 头
- 边缘计算:在 CDN 边缘节点执行简单的动态逻辑
- API 响应缓存:缓存 API 的响应结果
2. 智能缓存
基于内容的特性自动调整缓存策略:
- 静态文件自动长缓存:根据文件扩展名自动设置长 TTL
- 动态内容自动短缓存:检测到频繁更新自动缩短 TTL
- 热门内容优先缓存:根据访问频率优化缓存
3. 条件缓存
根据特定条件决定是否缓存:
- 基于用户类型:普通用户缓存,付费用户实时
- 基于地理位置:某些地区缓存,某些地区实时
- 基于时间:高峰期缓存,低峰期实时
缓存策略优化建议
1. 合理设置 TTL
- 静态资源:设置较长的 TTL(1 天到 1 年)
- 动态内容:设置较短的 TTL(几秒到几分钟)
- 版本化资源:使用文件名版本控制,可以设置无限缓存
2. 使用缓存控制头
http// 强制缓存 Cache-Control: public, max-age=31536000, immutable // 禁止缓存 Cache-Control: no-store, no-cache // 协商缓存 Cache-Control: no-cache ETag: "abc123" Last-Modified: Wed, 21 Oct 2026 07:28:00 GMT
3. 监控缓存命中率
- 高命中率(>90%):缓存策略有效
- 中等命中率(70-90%):需要优化
- 低命中率(<70%):需要重新评估策略
4. A/B 测试缓存策略
对不同用户群体使用不同的缓存策略,比较效果:
- 测试不同的 TTL 值
- 测试不同的缓存键配置
- 测试是否启用边缘计算
常见问题及解决方案
问题 1:内容更新后用户仍看到旧内容
解决方案:
- 使用 URL 版本控制(如
style.v2.css) - 主动刷新 CDN 缓存
- 设置合理的 TTL
问题 2:缓存命中率低
解决方案:
- 检查缓存键配置是否合理
- 分析未缓存的原因(如 Cookie、Authorization 头)
- 调整 TTL 设置
问题 3:源站压力仍然很大
解决方案:
- 增加 TTL 延长缓存时间
- 启用缓存预热
- 检查是否有大量回源请求
面试要点
回答这个问题时应该强调:
- 理解不同缓存策略的适用场景
- 能够根据业务需求选择合适的策略
- 了解缓存策略对性能的影响
- 有实际优化经验或案例
- 能够分析缓存命中率并提出改进建议