2009/6/9 Paul M Foster <pa...@quillandmouse.com>:
> This question may be too complex for a reasonable answer on this list,
> but I'll ask anyway.
> If a page has static content (no PHP variables, etc.), I can
> understand how caching works. The engine just checks to see if it's got
> a copy of the requested page in the cache, and displays it if so, or
> fetches it if not.
> But if a page is populated with variables from a database (for example)
> which could change from time to time, how could a caching engine
> possibly cache it? How would it determine whether to re-fetch the page
> or use the cached version?

Assuming you're not talking about client-side caching which Dan has
already covered...

Generally speaking there's two ways to approach server-side caching...
update-on-expiry and update-on-change.

For update-on-expiry you simply tell the caching system how long the
cache should last and when the cache expires that chunk the code will
generate it again from the database.

In update-on-change you take a more pro-active approach and have any
code that changes cached data update/expire any cache items that use

Which approach is best depends on a number of factors including the
type of data being cached, how often it will change and how fresh you
need the site to be. It's also worth nothing that update-on-expiry is
fine as it is for low traffic sites but if you have a high traffic
site you'll need to look at locking the cache item while it's
generated otherwise you could have a large number of requests
simultaneously updating the same cache items.

On the main site I maintain I use update-on-change and just store the
raw data in the cache - most pages are generated from this data
on-the-fly. There are a few pages that are hit a lot that I cache as
an HTML chunk but for the most part it's just data in the cache. My
reasoning behind this is that DB's are painful and expensive to scale
whereas HTTP/PHP servers are simple and cheap.



PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to