為さねば成らぬ

retia.verno@gmail.com

obj.hitsはHIT/MISSを厳密には表していない

Varnishを扱う上で、リクエストがCacheにHitしたかMissしたかを判別するためにheaderを付与することがままある。というか公式Wikiに書いてある。

sub vcl_deliver {
        if (obj.hits > 0) {
                set resp.http.X-Cache = "HIT";
        } else {
                set resp.http.X-Cache = "MISS";
        }
}

(https://www.varnish-cache.org/trac/wiki/VCLExampleHitMissHeader)

これを見るとobj.hits == 0のときはCache Missしているように見えるが、厳密に言うとそう ではない

例えばあるURLに対してBanしたあと再度アクセスすると、BackendへリクエストしているはずなのにX-CacheはHITのままになる。 またgraceしたときもHITになるようだ。

obj.hitsがresetされるのは、そのhash/keyに対するすべてのobjectが消えたときらしい。

参照:

https://www.varnish-cache.org/trac/changeset/278d90fdc0008a55405550482ccf9bc4d74f18dc