From: Stanislav Malyshev [mailto:smalys...@gmail.com] 
> > 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

Reply via email to