C# .Net System.Web.Caching过期问题

C# .Net System.Web.Caching过期问题,c#,asp.net,.net,C#,Asp.net,.net,假设我有一个缓存,它将在一分钟后过期 Cache.Insert("tryin", 0, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration); 每隔5秒钟,我就有一个计时器将缓存级别增加1,但问题来了。如果使用以下语法更新缓存的值 Cache["tryin"] = Convert.ToInt16(Cache["tryin"]) + 1; 它将覆盖缓存并创建一个无滑动过期和无绝对过期的缓存[“tryin”],但我希望该缓存在

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

Cache.Insert("tryin", 0, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);
每隔5秒钟,我就有一个计时器将缓存级别增加1,但问题来了。如果使用以下语法更新缓存的值

Cache["tryin"] = Convert.ToInt16(Cache["tryin"]) + 1;
它将覆盖缓存并创建一个无滑动过期和无绝对过期的缓存[“tryin”],但我希望该缓存在一分钟后过期。 我还尝试使用以下语法

Cache.Insert("tryin", Convert.ToInt16(Cache["tryin"]) + 1, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);
但在本例中,我将创建一个缓存,该缓存将在5秒内一分钟后过期,这使得它不会过期


因此,我正在寻找一种方法来更新缓存值而不更改缓存过期时间,或者获取缓存的剩余过期时间,以便根据剩余过期时间创建另一个。我认为这里的问题在于缓存项是一种值类型。您可以在类中包装整数:

public class ValueHolder
{
  public int Value = 0;
}

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


您在这里试图实现的用例到底是什么?通常认为修改缓存值而不更改过期时间是非常不寻常的。e、 g.如果数据可以缓存一分钟,而您在30秒后对其进行修改。。当然新值是“新鲜”的,现在可以再保存一分钟?我知道这不是以这种方式使用缓存的“通常”情况,但我只是想知道是否有任何方法可以在不更新缓存过期时间的情况下更新缓存的值,因为显然我希望它过期,哈哈。如果没有缓存的方法,那么我可以问一下我的选择吗?这也是我的建议。我见过有人开枪打自己的脚,却忘了如果你通过引用从缓存中获取一个对象,然后修改它,你就是在修改缓存的副本。在这种情况下,不妨利用这一事实对您有利。:-)
ValueHolder vh = (ValueHolder)Cache["tryin"];
if (vh != null)
  vh.Value = vh.Value + 1;