squid 清除快取

2021-08-31 17:49:32 字數 2833 閱讀 8521

7.6 刪除快取物件

在某些情況下,你必須從squid的cache裡手工刪除乙個或多個物件。這些情況可能包括:

+ 你的使用者抱怨總接收到過時的資料;

+ 你的cache因為某個響應而「中毒」;

+ squid的cache索引在經歷磁碟i/o錯誤或頻繁的crash和重啟後,變得有問題;

+ 你想刪除一些大目標來釋放空間給新的資料;

+ squid總從本地伺服器中cache響應,現在你不想它這樣做。

上述問題中的一些可以通過強迫web瀏覽器reload來解決。然而,這並非總是可靠。例如,一些瀏覽器通重載入另外的程式,從而顯示某些類容型別;那個程式可能沒有reload按鈕,或甚至它了解cache的情況。

假如必要,你總可以使用squidclient程式來reload快取目標。簡單的在uri前面使用-r選項:

% squidclient -r >;/tmp/foo

假如你碰巧在refresh_pattern指令裡設定了ignore-reload選項,你和你的使用者將不能強迫快取響應更新。在這樣的情形下,你最好清除這些有錯誤的快取物件。

7.6.1 刪除個別物件

squid接受一種客戶請求方式,用於刪除cache物件。purge方式並非官方http請求方式之一。它與delete不同,對後者,squid將其**到原始伺服器。purge請求要求squid刪除在uri裡提交的目標。squid返回200(ok)或404(not found)。

purge方式某種程度上有點危險,因為它刪除了cache目標。除非你定義了相應的acl,否則squid禁止purge方式。正常的,你僅僅允許來自本機和少數可信任主機的purge請求。配置看起來如下:

squidclient程式提供了產生purge請求的容易方法,如下:

% squidclient -m purge

代替的,你可以使用其他工具(例如perl指令碼)來產生你自己的http請求。它非常簡單:

注意某個單獨的uri不唯一標明乙個快取響應。squid也在cache關鍵字裡使用原始請求方式。假如響應包含了不同的頭部,它也可以使用其他請求頭。當你發布purge請求時,squid使用get和head的原始請求方式來查詢快取目標。而且,squid會刪除響應裡的所有variants,除非你在purge請求的相應頭部裡指定了要刪除的variants。squid僅僅刪除get和head請求的variants。

7.6.2 刪除一組物件

不幸的是,squid沒有提供乙個好的機制,用以立刻刪除一組物件。這種要求通常出現在某人想刪除所有屬於同一臺原始伺服器的物件時。

因為很多理由,squid不提供這種功能。首先,squid必須遍歷所有快取物件,執行線性搜尋,這很耗費cpu,並且耗時較長。當squid在搜尋時,使用者會面臨效能下降問題。第二,squid在記憶體裡對uri保持md5演算法,md5是單向雜湊,這意味著,例如,你不能確認是否某個給定的md5雜湊是由包含"www.example.com"字串的uri產生而來。唯一的方法是從原始uri重新計算md5值,並且看它們是否匹配。因為squid沒有保持原始的uri,它不能執行這個重計算。

那麼該怎麼辦呢?

你可以使用access.log裡的資料來獲取uri列表,它們可能位於cache裡。然後,將它們用於squidclient或其他工具來產生purge請求,例如:

% awk \'\' /usr/local/squid/var/logs/access.log \

| grep www.example.com \

| xargs -n 1 squidclient -m purge

7.6.3 刪除所有物件

在極度情形下,你可能需要刪除整個cache,或至少某個cache目錄。首先,你必須確認squid沒有在執行。

讓squid忘記所有快取物件的最容易的方法之一,是覆蓋swap.state檔案。注意你不能簡單的刪除swap.state檔案,因為squid接著要掃瞄cache目錄和開啟所有的目標檔案。你也不能簡單的截斷swap.state為0大小。代替的,你該放置乙個單位元組在裡面,例如:

# echo \'\' >; /usr/local/squid/var/cache/swap.state

當squid讀取swap.state檔案時,它獲取到了錯誤,因為在這裡的記錄太短了。下一行讀取就到了檔案結尾,squid完成重建過程,沒有裝載任何目標元資料。

注意該技術不會從磁碟裡刪除cache檔案。你僅僅使squid認為它的cache是空的。當squid執行時,它增加新檔案到cache裡,並且可能覆蓋舊檔案。在某些情形下,這可能導致你的磁碟使用超出了自由空間。假如這樣的事發生,你必須在再次重啟squid前刪除舊檔案。

刪除cache檔案的方法之一是使用rm。然而,它通常花費很長的時間來刪除所有被squid建立的檔案。為了讓squid快速啟動,你可以重新命名舊cache目錄,建立乙個新目錄,啟動squid,然後同時刪除舊目錄。例如:

# squid -k shutdown

# cd /usr/local/squid/var

# mv cache oldcache

# mkdir cache

# chown nobody:nobody cache

# squid -z

# squid -s

# rm -rf oldcache &

另一種技術是簡單的在cache檔案系統上執行newfs(或mkfs)。這點僅在你的cache_dir使用整個磁碟分割槽時才可以執行。

squid快取清除的方法

如何清除squid 快取 1 首先在squid 的主配置檔案中新增acl 列表,並允許受信任的主機有許可權清除快取 2 清除squid 中一條快取 usr local squid bi squidclient h 192.168.1.145 p 80 m purge 3 批量清除squid 快取中的...

清除指定squid快取檔案的指令碼

對於類似 之類的網頁,squid只會生成乙個快取檔案。可以用squid附帶的squidclient工具清除 引用 squidclient m purge p 80 因 後面的引數不同,導致url也不同,squid會生成多個快取檔案,雜湊分散存放在不同的目錄。如果修改了這個outer player.s...

squid純記憶體快取

原貼 http blog.scaner.i.thu.cn index.php 2006 11 20 squid pure memory cache posted by scaner in linux,web trackback 看見網上不少介紹squid的使用經驗,說可以用ramdisk tmpfs...