CDN场景下文件缓存最佳实践

  • Post author:
  • Post category:其他




缓存介绍



浏览器缓存

浏览器缓存结果来说分为四种

  • Service Worker
  • Memory Cache
  • Disk Cache
  • Push Cache

    其中Memory Cache、Disk Cache最为常见,

    Memory Cache —内存中的缓存,随着页面的关闭而释放

    Disk Cache —硬盘中的缓存,不会随着浏览器关闭而释放,需要手动清理

一般浏览器缓存根据默认缓存策略或Cache-Control设置进行缓存

  • Cache-Control由CDN返回或者文件header头携带,CDN header配置>源文件header头配置
  • 如果 Cache-Control、Expires均没设置,按照如下缓存策略计算
if ((last_modified > 0) && (date > 0) && (date - last_modified) > 0) {
    return (date - last_modified) / 10;
}



CDN缓存

我们可以通过浏览器判断文件是否有CDN缓存,在Response Headers字段内,可以查看详细的请求和返回的报文信息。

  • Age:为CDN返回的头部字段,表示该文件在CDN节点上缓存的时间,单位为秒。只有文件存在于节点上Age字段才会出现,当文件被刷新后或者文件被清除的首次访问,在此前文件并未缓存,无Age头部字段,需要注意当Age为0时,表示节点已有文件的缓存,但由于缓存已过期,本次无法直接使用该缓存,需回源校验。
  • X-Swift-SaveTime:CDN节点上的缓存RS(swift)的时间,即该文件是在什么时间缓存到CDN节点上。
  • X-Swift-CacheTime:CDN节点上的允许缓存时间,即该文件可以在CDN节点上缓存多久,是指文件在CDN节点缓存的总时间。计算还有多久需要回源刷新= ’X-Swift-CacheTime’ – ‘Age’。
  • HIT:表示已缓存。
  • MISS:节点上无该文件的缓存,回源请求。

CDN缓存策略由源文件header头及CDN缓存周期决定

在这里插入图片描述



业务缓存设置

一般业务会遇到三种场景,1、高频访问需要及时刷新,2、高频访问不需要及时刷新,3、低频访问

根据这三种场景我们CDN缓存和浏览器缓存可按如下表格选择

场景 CDN缓存设置 浏览器缓存设置
高频访问且及时更新 缓存时间小(小于1天) 缓存时间小,可和CDN缓存配置一样
高频访问不更新 缓存时间大(大于30天) 缓存时间大,且要大于CDN缓存周期
低频访问 缓存时间(1天-30天) 缓存时间大,且要大于CDN缓存周期



Cache-Control

此处介绍最常见的几种设置

  • Cache-Control:no-cache 告诉CDN和浏览器不需要缓存,资源请求需要强一致校验
  • Cache-Control:max-age=3600 表示缓存内容将在3600秒后失效,

    注意:此处要和CDN缓存更新时间比较,date+max-age需要大于当前访问时间才会被本地浏览器缓存
  • Cache-Control:s-maxage=3600 同max-age作用一样,只在代理服务器中生效



版权声明:本文为qq_36464836原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。