我在MemoryCache中存储了一个对象:
void foo()
{
ObjectCache cache = MemoryCache.Default;
SomeClass obj = cache["CACHE_KEY"] as SomeClass;
if (null == obj )
{
obj = new SomeClass(); ....
CacheItemPolicy policy = new CacheItemPolicy();
//update
policy.AbsoluteExpiration = DateTime.Now+TimeSpan.FromMinutes(1);
cache.Set("CACHE_KEY", obj, policy);
}
else
{
//get expiry date
}
.....
}
如果缓存包含对象,是否有可能以某种方式获得到期日期?
答案 0 :(得分:5)
由于您设置了滑动过期,是否总是距您访问它的10分钟?如果对象为null,则缓存条目已过期,如果没有,则到期时间(在上面的代码中)始终是您检查时间的10分钟?
或者您可以拥有一个基础对象(所有可缓存对象都继承自),并将到期时间作为在添加到缓存时设置的属性。提取对象时,检查属性,并且您有到期时间来计算差异。只是一个想法。
答案 1 :(得分:2)
如上所述,将对象保存到记忆缓存后保存到期值,
cache.Set(DataKey, DataToStore, policy);
cache.Set("MemCahceExpiry", DateAndTime.Now.AddHours(6), policy);
然后从到期密钥中读取到期日期:
public static DateTime CheckCachedExpiry()
{
DateTime MemCacheEXpirayDate = default(DateTime);
MemCacheEXpirayDate = Convert.ToDateTime(MemoryCache.Default.Get("MemCahceExpiry"));
return MemCacheEXpirayDate;
}