對(duì)squid中refresh_pattern的一些理解和建議
更新時(shí)間:2009年04月17日 21:31:13 作者:
用于確定一個(gè)頁(yè)面進(jìn)入cache后,它在cache中停留的時(shí)間。refresh_pattern規(guī)則僅僅應(yīng)用到?jīng)]有明確過時(shí)期限的響應(yīng)。原始服務(wù)器能使用Expires頭部,或者Cache-Control:max-age指令來指定過時(shí)期限。
refresh_pattern的作用:
用于確定一個(gè)頁(yè)面進(jìn)入cache后,它在cache中停留的時(shí)間。refresh_pattern規(guī)則僅僅應(yīng)用到?jīng)]有明確過時(shí)期限的響應(yīng)。原始服務(wù)器能使用Expires頭部,或者Cache-Control:max-age指令來指定過時(shí)期限。
語(yǔ)法:refresh_pattern [-i] regexp min percent max [options]
min參數(shù)是分鐘數(shù)量。它是過時(shí)響應(yīng)的最低時(shí)間限制。如果某個(gè)響應(yīng)駐留在cache里的時(shí)間沒有超過這個(gè)最低限制,那么它不會(huì)過期。類似的,max參數(shù)是存活響應(yīng)的最高時(shí)間限制。如果某個(gè)響應(yīng)駐留在cache里的時(shí)間高于這個(gè)最高限制,那么它必須被刷新。
在最低和最高時(shí)間限制之間的響應(yīng),會(huì)面對(duì)squid的最后修改系數(shù)LM-factor算法LM-factor=(response age)/(resource age)。對(duì)這樣的響應(yīng),squid計(jì)算響應(yīng)的年齡和最后修改系數(shù),然后將它作為百分比值進(jìn)行比較。響應(yīng)年齡簡(jiǎn)單的就是從原始服務(wù)器產(chǎn)生,或最后一次驗(yàn)證響應(yīng)后,經(jīng)歷的時(shí)間數(shù)量。源年齡在Last-Modified和Date頭部之間是不同的。LM-factor是響應(yīng)年齡與源年齡的比率。
常用的幾個(gè)參數(shù)的意思
override-expire
該選項(xiàng)導(dǎo)致squid在檢查Expires頭部之前,先檢查min值。這樣,一個(gè)非零的min時(shí)間讓squid返回一個(gè)未確認(rèn)的cache命中,即使該響應(yīng)準(zhǔn)備過期。
override-lastmod
改選項(xiàng)導(dǎo)致squid在檢查L(zhǎng)M-factor百分比之前先檢查min值。
reload-into-ims
該選項(xiàng)讓squid在確認(rèn)請(qǐng)求里,以no-cache指令傳送一個(gè)請(qǐng)求。換句話說,squid在轉(zhuǎn)發(fā)請(qǐng)求之前,對(duì)該請(qǐng)求增加一個(gè)If-Modified- Since頭部。注意這點(diǎn)僅僅在目標(biāo)有Last-Modified時(shí)間戳?xí)r才能工作。外面進(jìn)來的請(qǐng)求保留no-cache指令,以便它到達(dá)原始服務(wù)器。
一般情況可以使用 reload-into-ims。它其實(shí)是強(qiáng)行控制對(duì)象的超時(shí)時(shí)間,這違反了http協(xié)議的精神,但是在帶寬較窄的場(chǎng)合,可以提高明顯系統(tǒng)相應(yīng)時(shí)間。
舉例:
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
該選項(xiàng)導(dǎo)致squid忽略請(qǐng)求里的任何no-cache指令。
所以。如果希望內(nèi)容一進(jìn)入cache就不刪除,直到被主動(dòng)purge掉為止,可以加上ignore-reload選項(xiàng),這個(gè)我們常用在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 =對(duì)象進(jìn)入cache的時(shí)間-對(duì)象的last_modified
response age =當(dāng)前時(shí)間-對(duì)象進(jìn)入cache的時(shí)間
LM-factor=(response age)/(resource age)
舉個(gè)例子,這里只考慮percent, 不考慮min 和max
例如:refresh_pattern 20%
假設(shè)源服務(wù)器上www.aaa.com/index.htm -----lastmodified 是 2007-04-10 02:00:00
squid上 proxy.aaa.com/index.htm index.htm進(jìn)入cache的時(shí)間 2007-04-10 03:00:00
1)如果當(dāng)前時(shí)間 2007-04-10 03:00:00
resource age =3點(diǎn)-2點(diǎn)=60分鐘
response age =0分鐘
index.htm還可以在cache停留的時(shí)間(resource age)*20%=12分鐘
也就是說,index.htm進(jìn)入cache后,可以停留12分鐘,才被重新確認(rèn)。
2)如果當(dāng)前時(shí)間 2007-04-10 03:05:00
resource age =3點(diǎn)-2點(diǎn)=60分鐘
response age =5分鐘
index.htm還可以在cache停留的時(shí)間(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中的頁(yè)面index.htm終于stale。
如果這時(shí)沒有index.htm的請(qǐng)求,index.htm會(huì)一直在緩存中,如果有index.htm請(qǐng)求,squid收到該請(qǐng)求后,由于已經(jīng)過期, squid會(huì)向源服務(wù)器發(fā)一個(gè)index.htm是否有改變的請(qǐng)求,源服務(wù)器收到后,如果index.htm沒有更新,squid就不用更新緩存,直接把緩存的內(nèi)容放回給客戶端,同時(shí),重置對(duì)象進(jìn)入cache的時(shí)間為與源服務(wù)器確認(rèn)的時(shí)間,比如2007-04-10 03:13:00,如果正好在這個(gè)后重新確認(rèn)了頁(yè)面。重置后,resource age變長(zhǎng),相應(yīng)在cache中存活的時(shí)間也變長(zhǎng)。
如果有改變則把最新的index.htm返回給squid,squid收到會(huì)更新緩存,然后把新的index.htm返回給客戶端,同時(shí)根據(jù)新頁(yè)面中的Last_Modified和取頁(yè)面的時(shí)間,重新計(jì)算resource age,進(jìn)一步計(jì)算出存活時(shí)間。
實(shí)際上,一個(gè)頁(yè)面進(jìn)入cache后,他的存活時(shí)間就確定了,即 (resource age) * 百分比,一直到被重新確認(rèn)。
用于確定一個(gè)頁(yè)面進(jìn)入cache后,它在cache中停留的時(shí)間。refresh_pattern規(guī)則僅僅應(yīng)用到?jīng)]有明確過時(shí)期限的響應(yīng)。原始服務(wù)器能使用Expires頭部,或者Cache-Control:max-age指令來指定過時(shí)期限。
語(yǔ)法:refresh_pattern [-i] regexp min percent max [options]
min參數(shù)是分鐘數(shù)量。它是過時(shí)響應(yīng)的最低時(shí)間限制。如果某個(gè)響應(yīng)駐留在cache里的時(shí)間沒有超過這個(gè)最低限制,那么它不會(huì)過期。類似的,max參數(shù)是存活響應(yīng)的最高時(shí)間限制。如果某個(gè)響應(yīng)駐留在cache里的時(shí)間高于這個(gè)最高限制,那么它必須被刷新。
在最低和最高時(shí)間限制之間的響應(yīng),會(huì)面對(duì)squid的最后修改系數(shù)LM-factor算法LM-factor=(response age)/(resource age)。對(duì)這樣的響應(yīng),squid計(jì)算響應(yīng)的年齡和最后修改系數(shù),然后將它作為百分比值進(jìn)行比較。響應(yīng)年齡簡(jiǎn)單的就是從原始服務(wù)器產(chǎn)生,或最后一次驗(yàn)證響應(yīng)后,經(jīng)歷的時(shí)間數(shù)量。源年齡在Last-Modified和Date頭部之間是不同的。LM-factor是響應(yīng)年齡與源年齡的比率。
常用的幾個(gè)參數(shù)的意思
override-expire
該選項(xiàng)導(dǎo)致squid在檢查Expires頭部之前,先檢查min值。這樣,一個(gè)非零的min時(shí)間讓squid返回一個(gè)未確認(rèn)的cache命中,即使該響應(yīng)準(zhǔn)備過期。
override-lastmod
改選項(xiàng)導(dǎo)致squid在檢查L(zhǎng)M-factor百分比之前先檢查min值。
reload-into-ims
該選項(xiàng)讓squid在確認(rèn)請(qǐng)求里,以no-cache指令傳送一個(gè)請(qǐng)求。換句話說,squid在轉(zhuǎn)發(fā)請(qǐng)求之前,對(duì)該請(qǐng)求增加一個(gè)If-Modified- Since頭部。注意這點(diǎn)僅僅在目標(biāo)有Last-Modified時(shí)間戳?xí)r才能工作。外面進(jìn)來的請(qǐng)求保留no-cache指令,以便它到達(dá)原始服務(wù)器。
一般情況可以使用 reload-into-ims。它其實(shí)是強(qiáng)行控制對(duì)象的超時(shí)時(shí)間,這違反了http協(xié)議的精神,但是在帶寬較窄的場(chǎng)合,可以提高明顯系統(tǒng)相應(yīng)時(shí)間。
舉例:
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
該選項(xiàng)導(dǎo)致squid忽略請(qǐng)求里的任何no-cache指令。
所以。如果希望內(nèi)容一進(jìn)入cache就不刪除,直到被主動(dòng)purge掉為止,可以加上ignore-reload選項(xiàng),這個(gè)我們常用在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 =對(duì)象進(jìn)入cache的時(shí)間-對(duì)象的last_modified
response age =當(dāng)前時(shí)間-對(duì)象進(jìn)入cache的時(shí)間
LM-factor=(response age)/(resource age)
舉個(gè)例子,這里只考慮percent, 不考慮min 和max
例如:refresh_pattern 20%
假設(shè)源服務(wù)器上www.aaa.com/index.htm -----lastmodified 是 2007-04-10 02:00:00
squid上 proxy.aaa.com/index.htm index.htm進(jìn)入cache的時(shí)間 2007-04-10 03:00:00
1)如果當(dāng)前時(shí)間 2007-04-10 03:00:00
resource age =3點(diǎn)-2點(diǎn)=60分鐘
response age =0分鐘
index.htm還可以在cache停留的時(shí)間(resource age)*20%=12分鐘
也就是說,index.htm進(jìn)入cache后,可以停留12分鐘,才被重新確認(rèn)。
2)如果當(dāng)前時(shí)間 2007-04-10 03:05:00
resource age =3點(diǎn)-2點(diǎn)=60分鐘
response age =5分鐘
index.htm還可以在cache停留的時(shí)間(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中的頁(yè)面index.htm終于stale。
如果這時(shí)沒有index.htm的請(qǐng)求,index.htm會(huì)一直在緩存中,如果有index.htm請(qǐng)求,squid收到該請(qǐng)求后,由于已經(jīng)過期, squid會(huì)向源服務(wù)器發(fā)一個(gè)index.htm是否有改變的請(qǐng)求,源服務(wù)器收到后,如果index.htm沒有更新,squid就不用更新緩存,直接把緩存的內(nèi)容放回給客戶端,同時(shí),重置對(duì)象進(jìn)入cache的時(shí)間為與源服務(wù)器確認(rèn)的時(shí)間,比如2007-04-10 03:13:00,如果正好在這個(gè)后重新確認(rèn)了頁(yè)面。重置后,resource age變長(zhǎng),相應(yīng)在cache中存活的時(shí)間也變長(zhǎng)。
如果有改變則把最新的index.htm返回給squid,squid收到會(huì)更新緩存,然后把新的index.htm返回給客戶端,同時(shí)根據(jù)新頁(yè)面中的Last_Modified和取頁(yè)面的時(shí)間,重新計(jì)算resource age,進(jìn)一步計(jì)算出存活時(shí)間。
實(shí)際上,一個(gè)頁(yè)面進(jìn)入cache后,他的存活時(shí)間就確定了,即 (resource age) * 百分比,一直到被重新確認(rèn)。
您可能感興趣的文章:
- VBS教程:VBscript屬性-Pattern 屬性
- JAVA正則表達(dá)式 Pattern和Matcher
- JavaScript constructor和instanceof,JSOO中的一對(duì)歡喜冤家
- Javascript的構(gòu)造函數(shù)和constructor屬性
- JavaScript類和繼承 constructor屬性
- 理解Javascript_11_constructor實(shí)現(xiàn)原理
- 用于過濾空白字符的幾種常見的js正則表達(dá)式pattern
- php設(shè)計(jì)模式 Prototype (原型模式)代碼
- js constructor的實(shí)際作用分析
- 深入分析js中的constructor和prototype
- AspNetPager分頁(yè)控件UrlRewritePattern參數(shù)設(shè)置的重寫代碼
- JavaScript中幾個(gè)重要的屬性(this、constructor、prototype)介紹
- JavaScript設(shè)計(jì)模式之原型模式(Object.create與prototype)介紹
- js使用Array.prototype.sort()對(duì)數(shù)組對(duì)象排序的方法
- php示例詳解Constructor Prototype Pattern 原型模式
相關(guān)文章
php通過exif_read_data函數(shù)獲取圖片的exif信息
這篇文章主要介紹了php通過exif_read_data函數(shù)獲取圖片的exif信息,默認(rèn)情況下,PHP讀取圖片Exif信息模塊是不開啟的,我們需要先開啟這個(gè)模塊。開啟Exif模塊需要mbstring支持,這里就不詳細(xì)說明了,我們來先看下函數(shù)的用法2015-05-05
同臺(tái)服務(wù)器使用緩存APC效率高于Memcached的演示代碼
之前看到有文章說同臺(tái)服務(wù)器上APC的效率是Memcached的7倍,APC效率比Memcached高是肯定的,至于倒底快多少,我寫了個(gè)小程序測(cè)試了下。2010-02-02
PHP has encountered a Stack overflow問題解決方法
這篇文章主要介紹了PHP has encountered a Stack overflow問題解決方法,需要的朋友可以參考下2014-11-11
php class中public,private,protected的區(qū)別以及實(shí)例分析
本篇文章是對(duì)php class中public,private,protected的區(qū)別以及實(shí)例進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php強(qiáng)制用戶轉(zhuǎn)向www域名的方法
這篇文章主要介紹了php強(qiáng)制用戶轉(zhuǎn)向www域名的方法,可實(shí)現(xiàn)模擬301重定向的功能,并且針對(duì)無法head重定向的情況輸出鏈接,需要的朋友可以參考下2015-06-06
PHP設(shè)計(jì)模式之調(diào)解者模式的深入解析
本篇文章是對(duì)PHP設(shè)計(jì)模式中的調(diào)解者模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

