varnish快取清理

2022-05-27 18:09:07 字數 2191 閱讀 7541

本篇日誌應該較早該去寫的,一直脫了好久,直到最近才寫。在使用任務cache工具時,都會提到的乙個問題。如何只清理想清理的那部分快取,而其已快取的部分不受影響 。這裡就要用到varnishadm工具,先看下其用法:

help [command]ping [timestamp]auth response

quit

banner

status

start

stop

vcl.load vcl.inline vcl.use vcl.discard vcl.list

vcl.show param.show [-l]param.setpanic.show

panic.clear

storage.list

backend.list

backend.set_health matcher state

ban.url ban [&&]...ban.list

一、ban相關的用法

快取清理部分主要使用的是ban命令,在一些老的varnish版本裡是purge命令。varnishadm ban相關的處理命令非常強大,支援正則和不同的網域名稱進行區分,還支援按檔案大小進行處理。下面舉一些例子:

1、最簡單的用法ban.url 

清理所有網域名稱下download下的快取。

2、匹配網域名稱和url正則

以上是清理example.com網域名稱下所有png檔案的快取。

3、根據大小進行處理

varnishadm -t 127.0.0.1:2000req.url !~".ogg$"&&obj.size >10mb

以上是清理所有大於10mb的ogg檔案。

4、加cookile引數的清理

這裡是處理無論是www.example.com還是example.com下的cookile值userid=1663的所有快取 。

具體的寫法可以參看vcl語法,只要符合vcl語法的都可以通過ban使用。所有的正則含義如下:

二、檢視ban過的規則列表

可以使用ban.list檢視已經ban過的規則列表:

presentbans:1384427961.6412220req.url ~/download/1384415727.4960784greq.url ~/download/1384412783.2611841req.url ~/android/1384412640.2951760greq.url ~/download/

其中上面提到的g不是代表資料量大小的gbit ,而是gone的意思,代表已經長時間無效或已經變成過去式的資料。被標記g代表是重複ban ,之所以標記是出於優化的目的。

三、強制無效

將req.hash_always_miss的值設為true ,將會將當前的快取失效(但不會從歷史中清除),而直接從後端拿新鮮的資料物件快取,覆蓋當前資料。而舊的快取物件需要等到ttl過期或其他方法清除。

四、遠端處理

varnishadm還可以通過telnet的方法處理,不過需要在vcl檔案裡事先指定允許的ip 。具體操作方法是「telnet varnish的ip varnishadm的埠」,如telnet 192.168.55.100  2000,進入使用的命令和以上說明一直,如:上面到的是varnishadm   ban.list,在這裡就直接輸入ban.list就行了。另外需要注意的是在vcl規則中指定ban的ip時,重啟載入配置原配置或重啟varnish經常會報錯,如下:

acl purge 

增加後,再啟動報錯

varnish啟動遇到的乙個問題

按以上示例增加相關部分後,再載入配置檔案就正常了。

以上是基礎,類似通過php或客戶端等進行cache處理的都是在此基礎上進行的增強,最終呼叫的一般還是varnishadm或telnet varnishadm的實現。

Varnish搭建cdn快取

cdn的全稱是content delivery network,即內容奮發網路。其基本思路是盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快 更穩定。通過在網路各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智慧型虛擬網路,cdn系統能夠實時地根據網路流量和各...

Linux 清理快取,定時清理快取指令碼

檢視記憶體使用率 free m sed n 2p awk 清理記憶體 sync echo 1 proc sys vm drop caches 要達到釋放快取的目的,我們首先需要了解下關鍵的配置檔案 proc sys vm drop caches。這個檔案中記錄了快取釋放的引數,預設值為0,也就是不釋...

android快取清理

獲取包名的應用快取 在生命週期方法oncreate中先呼叫一次getcachesize packagemanager pm getactivity getpackagemanager listinfos pm.getinstalledpackages 0 for packageinfo info i...