【轉】Cache 文件是否存在的查詢

        當咱們使用 Squid 的時候,是否是經常會有個問題,怎麼查文件是否存在?你們是怎麼查的,我想大多都是使用 wget 來查,好比wget -S。 若是返回的響應頭部X-Cache顯示 HIT, 那麼文件就是從 squid的緩存中讀取的,而不是從源網站讀取,但但這樣作效率比較低。若是有大量的文件,好比 100萬份,那怎麼辦, 難道通通下載一次?有人就講了, 我不是能夠發 Head 請求查嗎?好比使用 Curl  -I <URL>來查, 這樣就沒有下載文件的過程,多快啊。 事實是這麼簡單嗎?php

1.  當文件不存在時首次查詢 Squidshell

咱們來使用 curl 加 -I 的參數來查詢 緩存

curl -I http://www.php-oa.com/data/emagazine/mode/mode_10.exe
......
X-Cache: MISS from BM_SC.php-oa.com

 嗯,很好,不存在,正常。文件不存在時就顯示 MISS ,這是對的。 bash

2. 上次查詢後在次查詢 Squid
咱們來使用 curl -I 來再查一次curl

curl -I http://www.php-oa.com/data/emagazine/mode/mode_10.exe
.........
X-Cache: HIT from BM_SC.php-oa.com

嗯,文件存在了,由 MISS 變成了 HIT。由於查詢也是一次訪問,因此會給這個文件下載回來,因此第二次變成 HIT。

 

3. 使用 Wget 確認查詢
好了,咱們如今在使用 wget -S 來在測試一下測試

wget -S http: //www .php-oa.com /data/emagazine/mode/mode_10 .exe
........
X-Cache: MISS from BM_SC.php-oa.com

怎麼回事,明明查了有,怎麼是 MISS?其實這是對的,由於 curl  -I  <URL>只發了一個 head 請求,Squid 會給這個 head 作 h ,但對對象自己的內容不會下載.因此第一次查的狀態是對的.之後都會是錯的響應.

 

解決方法網站

好了,一個高級又快速的解決方法 ,咱們還記的 ICP 嗎…是父子模式時用來處理查詢 Cache 是否存在的方法 …因此咱們只要實現一個 ICP 協議的查詢就好了.這樣就能大量查詢,狀態還會很準…ui

還好,有人寫好了現成的 ICP 協議的客戶端.下載地址: http://icp.ircache.net/tools/udp-banger.pl
使用很簡單,咱們先準備一個要查詢的列表,好比,example.txturl

cat example.txt |perl udp-banger.pl xxx.xxx.xxx.x 3130


這樣在標準輸出,就會輸出相關的內容spa

UDP_MISS http: //www .php-a.com/%C5%F9%F6%A8MIT%28%B5%DA01%BC%AF%29.mp4
UDP_HIT http: //www .php-oa.com/%C5%F9%F6%A8MIT%28%B5%DA01%BC%AF%29.mp4
UDP_MISS http: //www .php-a.com/%C5%F9%F6%A8MIT%28%B5%DA01%BC%AF%29.mp4


固然,這個還得對Squid進行適當的配置

icp_port 3130         # 端口
icp_hit_stale off     # 過時了,但存在是否還回答爲 HIT
icp_access allow all  # 那些地址能夠查詢
#icp_access deny all
相關文章
相關標籤/搜索