对squid中refresh_pattern的一些理解和建议


Posted in PHP onApril 17, 2009

refresh_pattern的作用:
用于确定一个页面进入cache后,它在cache中停留的时间。refresh_pattern规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires头部,或者Cache-Control:max-age指令来指定过时期限。
语法:refresh_pattern [-i] regexp min percent max [options]
min参数是分钟数量。它是过时响应的最低时间限制。如果某个响应驻留在cache里的时间没有超过这个最低限制,那么它不会过期。类似的,max参数是存活响应的最高时间限制。如果某个响应驻留在cache里的时间高于这个最高限制,那么它必须被刷新。
在最低和最高时间限制之间的响应,会面对squid的最后修改系数LM-factor算法LM-factor=(response age)/(resource age)。对这样的响应,squid计算响应的年龄和最后修改系数,然后将它作为百分比值进行比较。响应年龄简单的就是从原始服务器产生,或最后一次验证响应后,经历的时间数量。源年龄在Last-Modified和Date头部之间是不同的。LM-factor是响应年龄与源年龄的比率。
常用的几个参数的意思

override-expire
该选项导致squid在检查Expires头部之前,先检查min值。这样,一个非零的min时间让squid返回一个未确认的cache命中,即使该响应准备过期。

override-lastmod
改选项导致squid在检查LM-factor百分比之前先检查min值。

reload-into-ims
该选项让squid在确认请求里,以no-cache指令传送一个请求。换句话说,squid在转发请求之前,对该请求增加一个If-Modified- Since头部。注意这点仅仅在目标有Last-Modified时间戳时才能工作。外面进来的请求保留no-cache指令,以便它到达原始服务器。
一般情况可以使用 reload-into-ims。它其实是强行控制对象的超时时间,这违反了http协议的精神,但是在带宽较窄的场合,可以提高明显系统相应时间。
举例:
refresh_pattern -i \.css$ 1440 50% 129600 reload-into-ims
refresh_pattern -i \.xml$ 1440 50% 129600 reload-into-ims
refresh_pattern -i \.html$ 1440 90% 129600 reload-into-ims-
refresh_pattern -i \.shtml$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.hml$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.jpg$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.png$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.gif$ 1440 90% 129600 ignore-reload
refresh_pattern -i \.bmp$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.js$ 1440 90% 129600 reload-into-ims

ignore-reload
该选项导致squid忽略请求里的任何no-cache指令。
所以。如果希望内容一进入cache就不删除,直到被主动purge掉为止,可以加上ignore-reload选项,这个我们常用在mp3,wma,wmv,gif之类。
Examples:
refresh_pattern -i \.mp3$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.wmv$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.rm$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.swf$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.mpeg$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.wma$ 1440 50% 2880 ignore-reload
resource age =对象进入cache的时间-对象的last_modified
response age =当前时间-对象进入cache的时间
LM-factor=(response age)/(resource age)
举个例子,这里只考虑percent, 不考虑min 和max
例如:refresh_pattern 20%
假设源服务器上www.aaa.com/index.htm -----lastmodified 是 2007-04-10 02:00:00
squid上 proxy.aaa.com/index.htm index.htm进入cache的时间 2007-04-10 03:00:00

1)如果当前时间 2007-04-10 03:00:00
resource age =3点-2点=60分钟
response age =0分钟
index.htm还可以在cache停留的时间(resource age)*20%=12分钟
也就是说,index.htm进入cache后,可以停留12分钟,才被重新确认。

2)如果当前时间 2007-04-10 03:05:00
resource age =3点-2点=60分钟
response age =5分钟
index.htm还可以在cache停留的时间(resource age)*20%=12分钟-5=7
LM-factor=5/60=8.3%<20%

一直到2007-04-10 03:12:00 LM-factor=12/60=20% 之后,cache中的页面index.htm终于stale。
如果这时没有index.htm的请求,index.htm会一直在缓存中,如果有index.htm请求,squid收到该请求后,由于已经过期, squid会向源服务器发一个index.htm是否有改变的请求,源服务器收到后,如果index.htm没有更新,squid就不用更新缓存,直接把缓存的内容放回给客户端,同时,重置对象进入cache的时间为与源服务器确认的时间,比如2007-04-10 03:13:00,如果正好在这个后重新确认了页面。重置后,resource age变长,相应在cache中存活的时间也变长。

如果有改变则把最新的index.htm返回给squid,squid收到会更新缓存,然后把新的index.htm返回给客户端,同时根据新页面中的Last_Modified和取页面的时间,重新计算resource age,进一步计算出存活时间。

实际上,一个页面进入cache后,他的存活时间就确定了,即 (resource age) * 百分比,一直到被重新确认。

PHP 相关文章推荐
基于mysql的论坛(1)
Oct 09 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
一些被忽视的PHP函数(简单整理)
Apr 30 PHP
PHP __autoload函数(自动载入类文件)的使用方法
Feb 04 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
深入php之规范编程命名小结
May 15 PHP
浅谈PHP变量作用域以及地址引用问题
Dec 27 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
PHP内存使用情况如何获取
Oct 10 PHP
基础的WordPress插件制作教程
Nov 24 PHP
解读PHP中上传文件的处理问题
May 29 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
Jun 02 PHP
PHP 加密与解密的斗争
Apr 17 #PHP
php error_log 函数的使用
Apr 13 #PHP
PHP Document 代码注释规范
Apr 13 #PHP
php pcntl_fork和pcntl_fork 的用法
Apr 13 #PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 #PHP
php 动态执行带有参数的类方法
Apr 10 #PHP
PHP获取类中常量,属性,及方法列表的方法
Apr 09 #PHP
You might like
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
js选项卡的实现方法
2015/02/09 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
Python如何用filter函数筛选数据
2020/03/05 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
2020/06/22 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
上海中网科技笔试题
2012/02/19 面试题
实习自荐信
2013/10/13 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
难忘的一课教学反思
2014/04/30 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
Win10 Anaconda安装python-pcl
2022/04/29 Servers
js作用域及作用域链工作引擎
2022/07/07 Javascript