If I use an ObjectCache and add an item like so:
ObjectCache cache = MemoryCache.Default;
string o = "mydata";
cache.Add("mykey", o, DateTime.Now.AddDays(1));
I understand the object will expire in 1 day. But if the object is accessed 1/2 a day later using:
object mystuff = cache["mykey"];
Does this reset the timer so it's now 1 day since the last access of the entry with the key "mykey", or it still 1/2 a day until expiry?
If the answer is no is there is a way to do this I would love to know.
There are two types of cache policies you can use:
CacheItemPolicy.AbsoluteExpiration
will expire the entry after a set amount of time.
CacheItemPolicy.SlidingExpiration
will expire the entry if it hasn't been accessed in a set amount of time.
The ObjectCache Add()
overload you're using treats it as an absolute expiration, which means it'll expire after 1 day, regardless of how many times you access it. You'll need to use one of the other overloads. Here's how you'd set a sliding expiration (it's a bit more complicated):
CacheItem item = cache.GetCacheItem("item");
if (item == null) {
CacheItemPolicy policy = new CacheItemPolicy {
SlidingExpiration = TimeSpan.FromDays(1)
}
item = new CacheItem("item", someData);
cache.Set(item, policy);
}
You change the TimeSpan to the appropriate cache time that you want.