乐闻世界logo
搜索文章和话题

CDN 的缓存策略有哪些?如何优化 CDN 缓存命中率?

2月21日 17:01

CDN 缓存策略的核心概念

CDN 缓存策略决定了内容在边缘节点的存储时间和更新方式,直接影响用户体验和源站负载。合理的缓存策略可以最大化 CDN 的性能优势。

主要缓存策略

1. 基于 TTL(Time To Live)的缓存

TTL 是最基本的缓存控制机制,指定内容在 CDN 节点的缓存时间:

  • 短 TTL(秒级):适用于频繁更新的内容,如新闻、股票数据
  • 中等 TTL(分钟级):适用于偶尔更新的内容,如商品信息、用户资料
  • 长 TTL(小时/天级):适用于很少变化的内容,如静态资源、图片、视频

设置方式

http
Cache-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 延长缓存时间
  • 启用缓存预热
  • 检查是否有大量回源请求

面试要点

回答这个问题时应该强调:

  1. 理解不同缓存策略的适用场景
  2. 能够根据业务需求选择合适的策略
  3. 了解缓存策略对性能的影响
  4. 有实际优化经验或案例
  5. 能够分析缓存命中率并提出改进建议
标签:CDN