Varnish緩存更新策略調試過程

  由於應用要求對更新過的頁面需要進行實時更新,如新記錄的數據發表、修改、隱藏等操作,目前有兩種方法可以實現,第一種爲在應用平臺結合Varnish的Purege進行處理;第二種爲利用http request的header做相應的處理,比如頁面的redirect/header、按F5或Ctrl+F5鍵都會向服務器發送不同的Cache-Control,再將非更新頁配置obj.ttl=86400s(1天),這樣可以大大提高緩存的命中率。以下爲採用第二種方法針對不同瀏覽器的測試結果。

1) 默認配置下的瀏覽器響應
點擊在新窗口中瀏覽此圖片
    結論:在默認配置下瀏覽不管發送任何類型的Cache-Control,Varnish都不會對Purege進行處理。

2) 配置Cache-Control的no-cache時的瀏覽器響應
點擊在新窗口中瀏覽此圖片
    結論:說明Firefox瀏覽器只有按Ctrl+F5時纔會發送no-cache的Cache-Control,IE瀏覽器認爲服務器端的redirect的重定向就是一個no-cache,同樣按Ctrl+F5也如此。比較奇怪的就是Chrome瀏覽器即使按Ctrl+F5後同樣沒有向服務器端發送no-cache,後來查了資料,得知google爲了更好的利用本地cache,將Ctrl+F5的功能屏蔽。

3) 配置Cache-Control的max-age=0時的瀏覽器響應
點擊在新窗口中瀏覽此圖片
    結論:通過上表數據可以得出,Firefox在redirect的情況下,它會發送一public或Private的Cache-Control給服務器端,同時IE及Chrome都會以一個max-age=0的Cache-Control的標誌給服務器,此時的Chrome瀏覽器Ctrl+F5沒有發送no-cache,而是max-age=0。

Varnish配置文件處理塊

引用

if (req.http.Cache-Control ~ "(no-cache|max-age=0)"){
  purge_url(req.url);
}


與原配置(squid)命中率對比
點擊在新窗口中瀏覽此圖片
squid命中率
點擊在新窗口中瀏覽此圖片
Varnish命中率

 

 

 

 

 

http://blog.liuts.com/post/179/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章