对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 相关文章推荐
用Zend Encode编写开发PHP程序
Feb 21 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
php Smarty 字符比较代码
Feb 27 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
php文件操作之小型留言本实例
Jun 20 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
Oct 15 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 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
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
vue写一个组件
2018/04/09 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
大学生创业策划书
2014/02/02 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
实施意见格式范本
2015/06/05 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技