如何获取缓存项目的到期日期?

时间:2011-07-18 20:38:33

标签: c# asp.net

我在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 
  }
  .....
}

如果缓存包含对象,是否有可能以某种方式获得到期日期?

2 个答案:

答案 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;
}
相关问题