首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net System.Web.Caching到期问题

.Net System.Web.Caching到期问题
EN

Stack Overflow用户
提问于 2012-12-17 11:23:27
回答 1查看 699关注 0票数 0

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

代码语言:javascript
复制
Cache.Insert("tryin", 0, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);

每隔5秒,我就有一个计时器将缓存速度增加1,但问题来了。如果我使用以下语法来更新缓存的值,

代码语言:javascript
复制
Cache["tryin"] = Convert.ToInt16(Cache["tryin"]) + 1;

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

代码语言:javascript
复制
Cache.Insert("tryin", Convert.ToInt16(Cache["tryin"]) + 1, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);

但在本例中,我将最终创建一个缓存,该缓存将在每5秒内在一分钟后过期,这使得它不会过期。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-17 11:30:45

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

代码语言:javascript
复制
public class ValueHolder
{
  public int Value = 0;
}

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

然后

代码语言:javascript
复制
ValueHolder vh = (ValueHolder)Cache["tryin"];
if (vh != null)
  vh.Value = vh.Value + 1;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13907883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档