Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取缓存项的过期日期?_C#_Asp.net - Fatal编程技术网

C# 如何获取缓存项的过期日期?

C# 如何获取缓存项的过期日期?,c#,asp.net,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(); //updat

我将对象存储在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分钟?如果对象为null,则缓存项已过期,如果未过期,则过期时间(在上面的代码中)始终是从您检查的时间算起的10分钟


或者,可以将过期时间为属性的基本对象(所有可缓存对象都从中继承)作为添加到缓存时设置的属性。提取对象时,您会检查属性,并有过期时间来计算差异。只是想一想。

如前所述,将对象保存到内存缓存后,保存到期值

cache.Set(DataKey, DataToStore, policy);
cache.Set("MemCacheExpiry", DateAndTime.Now.AddHours(6), policy);
        
然后从到期密钥读取到期:

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

为什么不创建一个包含要缓存的对象及其过期日期的复合对象呢?@Jeremy McGee:这会起作用,但也许还有其他方法可以做到这一点。。。我只是想确保我没有重新发明方向盘。哎呀,我的错-应该是
绝对过期
,我只是从错误的来源粘贴了它,+1指出它。在我的答案中添加了另一个选项,不确定这是否对你有效。我看到有人添加了一条大意相同的评论,但我是第一个;)(第二种选择)-它会起作用,但我相信这是一种更好的方法(虽然我不确定;也许这是唯一的选择)。你为什么需要有效期?“从你访问它的时间算起,它不总是10分钟吗?”这将是。。。什么时候我认为想要做这个测试的意义在于你不知道什么时候有人最后一次访问它。大概你不希望你对过期时间的检查算作重置滑动过期的访问,因为那会破坏目的。但缓存对象可能知道过期时间是什么时候。有人会想,有一种方法可以问这个问题,而不必独立重新计算时间。