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

缓存介绍

浏览器缓存

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

  • 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作用一样,只在代理服务器中生效
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海盗巨人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值