From: Stanislav Malyshev [mailto:[email protected]]
> > Does the PHP stat cache include negative cache entries? If not, why
> > not?
>
> Negative cache is tricky. Most frequent patterns look like this:
>
> 1. if(file_exists("blah")) { do stuff }
>
> 2. if(!file_exists("blah")) { throw new Exception("no blah!"); } do stuff
>
> 3. if(!file_exists("blah")) { create("blah"); } do stuff
>
> Caching negative even short term would subtly break case 3, in that it
> would force creation of the file every time, thus killing any benefit
> from any caching (usually file creation is much more expensive process).
Yes, and that was my biggest worry about implementing a negative cache.
I'd have to hook all the ways a file could be created in order to correctly
flush entries in the negative cache. And, in the case of a site that doesn't
pathologically try to hit non-existent files, the overhead of a negative
cache is wasted cycles.
> Long term caching would also be big trouble with case 2. Unless there's a
> way to reset the cache and the app is very careful to do it - but file can
> be created by external means and also case 2 would be harder to fix without
> losing the benefits of caching.
Yes, it's the problem of detecting & hooking all the ways a file could be
created, and then flushing negative entries. And, as you've pointed out,
since there's potentially other, non-hookable ways to create files, I'd have
to provide API surface to flush entries out of the cache.
Thank you for the thoughtful response!
--E.
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php