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