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 correct.

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?

-Steve

Reply via email to