0

假设我有一个缓存将在一分钟后过期。

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 秒后一分钟过期,这使其不会过期。

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

4

1 回答 1

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;
于 2012-12-17T03:30:44.673 回答