.Net System.Web.Caching到期问题

时间:2012-12-17 03:23:27

标签: c# asp.net .net

假设我的缓存在一分钟后过期。

Cache.Insert("tryin", 0, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);

在每5秒钟我有一个计时器,可以将缓存增加1,但问题就出现了。如果我使用以下语法更新缓存的值,

Cache["tryin"] = Convert.ToInt16(Cache["tryin"]) + 1;

它将覆盖缓存并使用NoSlidingExpiration和NoAbsoluteExpiration创建Cache [“tryin”],但我希望缓存在一分钟后过期。 我还尝试使用以下语法

Cache.Insert("tryin", Convert.ToInt16(Cache["tryin"]) + 1, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);

但是在这种情况下,我将最终创建一个缓存,该缓存将在5秒钟后过一分钟,这将使其不会过期。

所以我正在寻找一种方法来更新缓存值而不更改缓存到期时间,或者获取缓存的剩余到期时间,以便我可以根据剩余的到期时间创建另一个缓存。

1 个答案:

答案 0 :(得分:2)

我认为这里的问题是缓存项是值类型。您可以将整数包装在一个类中:

public class ValueHolder
{
  public int Value = 0;
}

Cache.Insert("tryin", new ValueHolder(){Value = 0}, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);

然后

ValueHolder vh = (ValueHolder)Cache["tryin"];
if (vh != null)
  vh.Value = vh.Value + 1;