轉自:http://blog.liuts.com/post/179/
由于應用要求對更新過的頁面需要進行實時更新,如新記錄的資料發表、修改、隐藏等操作,目前有兩種方法可以實作,第一種為在應用平台結合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命中率