七牛云在后台配置有两个和缓存相关的配置,一个是maxAge值--客户端缓存,一个是cdn缓存
maxAge值和CDN缓存时间的区别?
访问资源链接时,缓存通常分为浏览器缓存和CDN节点缓存。
用户在浏览器中输入资源链接访问时,优先使用浏览器缓存,缓存失效或禁用本地缓存后,会向CDN节点请求资源,当CDN缓存时间超时后,会向源站发起资源请求。
- Cache-Control:max-age:设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒),控制用户浏览器端的缓存。
- CDN缓存:当CDN缓存超时后,节点认为缓存失效,会向源站重新请求资源。
现在例如有一个业务需求是客户更新logo,那我们需要及时更新,可是正常的上传是无法及时更新的,因为七牛云会有客户端缓存和cdn缓存,这时候可能有多种处理方式:
1.cdn和客户端缓存的时间调短,例如1分钟,这样每分钟就都会更新,我们覆盖上传文件后一分钟后就能查看到新的。
优点:操作方便。
缺点:这会导致七牛云的回源流量增多,数据量大的情况下会增加很多费用。
七牛云的云文件读取机制如下:
2.每次更新的时候,更改文件名,如果上传成功,则删掉老文件。
优点:也能成功。
缺点:有点麻烦
3.每次覆盖上传,然后调用刷新接口:
优点:不是很难处理,也能实现
缺点:调用刷新接口后也要等七牛云的队列处理,有时候会阻塞很久,因为是队列处理也是异步。
4.(推荐)每次上传还是覆盖上传,然后将文件名加上随机参数进行访问,并且随机参数只有在更新的情况下会更新,也就是说要把这个文件名加随机数的保存起来,例如:
第一次传,文件名:‘a.jpg’,域名:www.bcd.com ,随机数:123456,在不更新的情况下,往后访问的外链就一直是‘http://www.bcd.com/a.jpg?123456’
第二次更新,文件名:‘a.jpg’,域名:www.bcd.com ,随机数:666666,在不更新的情况下,往后访问的外链就一直是‘http://www.bcd.com/a.jpg?666666’。
缺点:需要把随机数也保存起来
有点:及时更新就能及时访问到,并且cdn溯源流量只在更新的时候会产生,其他时候不会产生,并且是覆盖文件,所以不需要删除老文件。