Cache miss stampedes
sgrimm at facebook.com
Thu Jul 26 08:13:13 UTC 2007
I admit I'm a bit baffled by this discussion (and I also admit I have
only been skimming it, so this might be a retread.) It seems like one of
two situations should be true:
1. The underlying data has not changed. The cache is therefore still
2. The underlying data has changed, and the cache is now stale.
In the first case, just don't set an expiration time and you're done,
yes? Since the item is frequently hit (hence the stampedes) it will
never get LRUed out.
In the second case, why are you waiting around for some unknown amount
of time to pass -- and for some client to get an actual cache miss --
before refreshing the cache? If you have a few hot keys that change
often but for whatever reason you can't invalidate / update the cache at
the time the underlying data gets updated, then another approach is to
have some background task periodically updating the hot items to their
current values. Again, you don't let the item expire in this scenario;
it just gets updated every once in a while. This way nobody has to deal
with a cache miss, and the values still stay as current as you want them
to (adjust the frequency of your background task's updates to taste)
with no stampedes.
What am I missing?
More information about the memcached