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

本文关键字:日期 缓存 何获取 获取 | 更新日期: 2023-09-27 18:02:22

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

如果缓存中包含对象,是否可能以某种方式获取过期日期?

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

既然您正在设置滑动过期,它不是总是从您访问它的时间10分钟吗?如果对象为空,则缓存条目已经过期,如果不是,则过期时间(在上面的代码中)总是从您检查的时间开始10分钟?

或者你可以有一个基对象(所有可缓存对象都继承它),它的过期时间是在你添加到缓存时设置的属性。提取对象时,要检查属性,并使用过期时间来计算差值。只是一个想法。

如上所述,在将对象保存到内存缓存时保存过期值,

cache.Set(DataKey, DataToStore, policy);
cache.Set("MemCacheExpiry", DateAndTime.Now.AddHours(6), policy);
        

然后从expiration key读取expiration:

public static DateTime CheckCachedExpiry()
{
    DateTime MemCacheExpiryDate = default(DateTime);
    MemCacheExpiryDate = Convert.ToDateTime(MemoryCache.Default.Get("MemCacheExpiry"));
    return MemCacheExpiryDate;
}