在網上搜索N多squid配置關於refresh_pattern的講解,這篇最易懂,轉自http://www.luocheng.cn/?/article/view/id/209
在squid.conf.default裏面,refresh_pattern參數下面的註釋是這樣的:
usage: refresh_pattern [-i] regex min percent max [options]
Basically a cached object is:
FRESH if expires < now, else STALE
STALE if age > max
FRESH if lm-factor < percent, else STALE
FRESH if age < min
else STALE |
以上所有的時間都是以分鐘爲單位計算。 很容易看懂是不是?
refresh_pattern指出的緩衝對象過期了,這個對象過期。(這不是廢話嘛!)
refresh_pattern指出的緩衝對象在squid的cache緩衝的時間大於max的話,這個對象過期。
refresh_pattern指出的緩衝對象的lm-factor大於等於percent的話,這個對象過期。
refresh_pattern指出的緩衝對象在squid的cache緩衝的時間小於min的話,這個對象不過期。
可是,這個lm-factor到底是怎麼算的?有什麼具體意義?估計好多同學搞不清楚了吧。來,look,下面的圖:
上面這張圖來自於《Squid.Definitive.Guide》第七章,對squid的LM-factor算法作出了一個很直觀的描述。
請注意這張圖的起始時間座標:
Last-Modified,這個是由squid讀取的原始web數據所規定的。
然後就是Date,這個是原始數據進入squid的緩衝的時間。
最後就是Expires,這個就是原始數據在squid中的緩衝過期時間。
可以很容易的得出結論,對於LM-factor算法來說,原始數據在squid中的緩衝時間爲
(原始數據進入squid的緩衝的時間-原始web數據所規定的Last-Modified時間)*percent
所以,我們可以鄭重得出結論,在squid的refresh_pattern設置中,percent與Min、Max兩個值是完全沒有關係!
最後總結一下,對於squid來說,緩衝的數據在cache中的存活時間是這樣決定的:
如果有定義refresh_pattern:只要滿足以下兩個條件之一,緩衝對象過期
緩衝對象在squid的cache緩衝的時間大於refresh_pattern定義的max
緩衝對象在squid的cache緩衝的時間大於(原始數據進入squid的緩衝的時間-原始web數據所規定的Last-Modified時間)*percent
如果符合多個refresh_pattern定義,以第一條符合定義的refresh_pattern爲準
如果沒有符合定義的refresh_pattern,則按squid的默認處理規則