The basic idea is to be able to have your l2 cache know when to
discard something. Currently, that means knowing one of the following
things occurred:
1) cache expired
2) lru removed item
3) item was explicitly deleted
4) item was replaced with set/replace/cas
5) item was updates with incr/append
Additionally, you'd probably also want to know about a flush.
You could build a secondary cache based only on tracking
expirations, but it would give wrong answers for many valid use
cases. For example, the "I'm going to cache this for a really long
time and update it in-place when I know it's changes" case.
--
Dustin Sallings (mobile)
On Dec 6, 2007, at 21:37, dormando <[EMAIL PROTECTED]> wrote:
Dustin Sallings wrote:
On Dec 6, 2007, at 19:03, dormando wrote:
- We discussed the alternative method of wrapping the real
expiration
time inside your serialized object, and using that instead. We think
that works out better for all invovled :)
The thing I've mentioned a couple of times, but have put no effort
into whatsoever is the ability to subscribe to an invalidation stream
somehow. It'd be pretty awesome to simply be notified when things
happen that invalidate keys.
There are obviously a few large holes that come about when one
goes
to implement such an idea (it shouldn't weigh down mutations, and
there's the question of how to be notified when something just
expires). I suppose the expiration time could be skipped if the
second-level cache *also* tracked the times.
It'd be a hard thing to get right, but it's the right way to do a
second-level cache.
Trying to think of how to use this... If something's expired in my
cache, there're good odds it'll be requested in that same second, or
very nearterm. It's more efficient to just let it expire and recache
on
its own.
What're some problems this could help resoundly solve? My lack of
creativity is embarassing.
-Dormando