Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1502161
  • 博文数量: 228
  • 博客积分: 1698
  • 博客等级: 上尉
  • 技术积分: 3241
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-24 21:49
个人简介

Linux

文章分类

全部博文(228)

文章存档

2017年(1)

2016年(43)

2015年(102)

2014年(44)

2013年(5)

2012年(30)

2011年(3)

分类: LINUX

2015-07-02 15:39:12

来源:https://blog.zymlinux.net/index.php/archives/698

cache.config配置中的revalidate、ttl-in-cache和pin-in-cache项由于意思比较接近,所以容易让人费解。故此做了点基本测试来尝试解释下这三项的异同。

  • revalidate
    认为还新鲜的时间,超过这个设定时间,需要回源检验对象是否新鲜。会影响http响应头部信息age。


  • ttl-in-cache
    强制缓存的时间,这个选项能够让ats忽略源的cache-control响应头部信息而强制缓存,并且认为对象在这个强制缓存时间里面是新鲜的。会影响http响应头部信息age。经测试发现其比revalidate优先级高。

  • pin-in-cache
    保留在缓存中的时间。为了避免热门对象会被删除,可以设置对象硬性保留在缓存中的时间,在设定的时期内,就算它已经过期了也不删除它。不会影响http响应头部信息age。

说明

由于pin-in-cache是不会影响http响应头部信息age的,所以可以不测试它带来的效果了,就理解它能够硬性保留对象在缓存中的时间即可。下面我们从效果上来分析下另外能够影响age信息的两项配置。
下面配置的dest_domain是回源的域名/ip。

测试环境说明

  • 在之前的blog——“ats新手测试环境搭建”中已经介绍过我的测试环境了。此次试验也是基于这个测试环境基础上。
  • nginx服务器跟ats在同一台机,ip为192.168.30.56,在nginx web配置目录放了图片文件1.gif

关于client请求头部no-cache的说明

请求头部信息是一直不变的,如下:

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Cache-Control   no-cache
Connection  keep-alive
Host    192.168.30.56
Pragma  no-cache
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0

ats默认是遵循用户请求头部信息的cache-control的,由上可以看到请求头部是有带no-cache信息的,在ats不配置忽略client端的no-cache情况下,会一直回源查询对象是否新鲜。
1

所以下面做如下配置忽略client端的no-cache信息:

traffic_line -s proxy.config.http.cache.ignore_client_no_cache -v 1
traffic_line -x

下面是实验测试结果

  • nginx配置expires off;cache.config不做任何配置

在忽略用户的no-cache情况下,源服务器又没有配置缓存时间的话,还分两种情况
* 对象已经在缓存中
* 对象还没在缓存中

对象已经在缓存中的时候ats遵循freahness _limit’='(date’ –’last_modified)’*’0.1来计算新鲜度。
age

在测试之后其实我已经做了如下操作替换了文件了,但是由于如上的判断新鲜度的方式认为缓存中的还是新鲜的。所以说,在源服务器不控制缓存时间和ats不控制缓存时间的情况下,是会导致用户取不到最新内容的。
cp

  • nginx配置expires off;cache.config配置dest_domain=192.168.30.56 ttl-in-cache=15s

对象能写入缓存,能保证对象在15s内是认为新鲜的。age在0-15s变化。

  • nginx配置expires off;cache.config配置dest_domain=192.168.30.56 revalidate=12s

对象没写入缓存,age一直是0。[cMsSf ]

  • nginx配置expires 10;

对象能写入到缓存中,age在0-10s之间。10s之后会回源检验一次对象是否新鲜。

  • nginx配置expires 10;cache.config配置dest_domain=192.168.30.56 revalidate=12s

对象能写入缓存中,age在0-12s之间,12s之后才会回源检验对象新鲜度。

  • nginx配置expires 10;cache.config配置dest_domain=192.168.30.56 revalidate=8s

对象能写入缓存中,age在0-8s之间,8s之后才会回源检验对象新鲜度。

  • nginx配置expires 10;cache.config配置dest_domain=192.168.30.56 ttl-in-cache=25s;dest_domain=. ttl-in-cache=20s

对象能写入缓存中,新鲜期为25s,遵循ttl-in-cache的配置。

  • nginx配置expires 10; cache.config配置dest_domain=192.168.30.56 revalidate=15s;dest_domain=. ttl-in-cache=20s

对象能写入缓存中,新鲜期为20s,遵循ttl-in-cache的配置。

  • nginx配置expires 10;cache.config配置 dest_domain=192.168.30.56 ttl-in-cache=15s;dest_domain=. ttl-in-cache=20s

对象能写入缓存中,新鲜期为15s,遵循前面ttl-in-cache的配置。

  • nginx配置expires 10; cache.config配置dest_domain=. ttl-in-cache=20s;dest_domain=192.168.30.56 ttl-in-cache=15s

对象能写入缓存中,新鲜期为20s,遵循前面ttl-in-cache的配置。

小结

优先级:ttl-in-cache>revalidate>expires(nginx)

  • revalidate 需要其他配置来保证对象能写入缓存中,如果不能写入缓存中,其配置无效。

  • ttl-in-cache 能够单独完成强制对象写入缓存中并保证认为的新鲜期,不需要额外的帮助使对象写入缓存中。

  • pin-in-cache 只是保证对象在缓存中不被删除,并不影响对象的新鲜度。

  • 在同级配置下,前面匹配的配置生效。

阅读(4274) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~