refresh_pattern指令間接的控制磁盤緩存。它幫助squid決定,是否某個給 定請求是cache命中,或做爲cache丟失對待。寬鬆的設置增長了你的cache命中率,但也增長了用戶接收過期響應的機會。另外一方面,保守的設置, 下降了cache命中率和過期響應。html
refresh_pattern規則僅僅應用到沒有明確過期期限的響應。原始服務器能使用Expires頭部,或者Cache-Control:max-age指令來指定過期期限。正則表達式
你能夠在配置文件裏放置任意數量的refresh_pattern行。squid按順序查找它們以匹配正則表達式。當squid找到一個匹配時,它使用相應的值來決定,某個緩存響應是存活仍是過時。refresh_pattern語法以下:算法
refresh_pattern [-i] regexp min percent max [options]
例如:緩存
refresh_pattern -i \.jpg$ 30 50% 4320 reload-into-ims refresh_pattern -i \.png$ 30 50% 4320 reload-into-ims refresh_pattern -i \.htm$ 0 20% 1440 refresh_pattern -i \.html$ 0 20% 1440 refresh_pattern -i . 5 25% 2880
regexp參數是大小寫敏感的正則表達式。你可使用-i選項來使它們大小寫不敏感。squid按順序來檢查refresh_pattern行;當正則表達式之一匹配URI時,它中止搜索。服務器
min參數是分鐘數量。它是過期響應的最低時間限制。若是某個響應駐留在cache裏的時間沒有超過這個最低限制,那麼它不會過時。相似的,max參數是存活響應的最高時間限制。若是某個響應駐留在cache裏的時間高於這個最高限制,那麼它必須被刷新。ide
在 最低和最高時間限制之間的響應,會面對squid的最後修改係數 (LM-factor)算法。對這樣的響應,squid計算響應的年齡和最後修改係數,而後將它做爲百分比值進行比較。響應年齡簡單的就是從原始服務器產 生,或最後一次驗證響應後,經歷的時間數量。源年齡在Last-Modified和Date頭部之間是不一樣的。LM-factor是響應年齡與源年齡的比 率。ui
圖7-2論證了LM-factor算法。squid緩存了某個目標3個小時 (基於Date和Last-Modified頭部)。LM-factor的值是50%,響應在接下來的1.5個小時裏是存活的,在這以後,目標會過時並被 看成過期處理。假如用戶在存活期間請求cache目標,squid返回沒有確認的cache命中。若在過期期間發生請求,squid轉發確認請求到原始服 務器。regexp
圖7-2 基於LM-factor計算過時時間htm
理解squid檢查不一樣值的順序很是重要。以下是squid的refresh_pattern算法的簡單描述:it
假如響應年齡超過refresh_pattern的max值,該響應過時;
假如LM-factor少於refresh_pattern百分比值,該響應存活;
假如響應年齡少於refresh_pattern的min值,該響應存活;
其餘狀況下,響應過時。
refresh_pattern指令也有少數選項致使squid違背HTTP協議規範。它們以下:
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指令,以便它到達原始服務器。
ignore-reload
該選項致使squid忽略請求裏的任何no-cache指令