I've got a simple object being cached like this:
_myCache.Add(someKey, someObj, policy);
Where _myCache
is declared as ObjectCache
(but injected via DI as MemoryCache.Default
), someObj
is the object i'm adding, and policy
is a CacheItemPolicy
.
If i have a CacheItemPolicy
like this:
var policy = new CacheItemPolicy
{
Priority = CacheItemPriority.Default,
SlidingExpiration = TimeSpan.FromHours(1)
};
It means it will expire in 1 hour. Cool.
But what will happen is that unlucky first user after the hour will have to wait for the hit.
Is there any way i can hook into an "expired" event/delegate and manually refresh the cache?
I see there is a mention of CacheEntryChangeMonitor
but can't find any meaninful doco/examples on how to utilize it in my example.
PS. I know i can use CacheItemPriority.NotRemovable
and expire it manually, but i can't do that in my current example because the cached data is a bit too complicated (e.g i would need to "invalidate" in like 10 different places in my code).
Any ideas?
Late to the party with this one but I've just noticed an interesting difference between CacheItemUpdate and CacheItemRemove callbacks.
http://msdn.microsoft.com/en-us/library/system.web.caching.cacheitemupdatereason.aspx
In particular this comment:
There's a property on the
CacheItemPolicy
calledRemovedCallback
which is of type:CacheEntryRemovedCallback
. Not sure why they didn't go the standard event route, but that should do what you need.http://msdn.microsoft.com/en-us/library/system.runtime.caching.cacheitempolicy.removedcallback.aspx