缓存过期未按预期工作

时间:2016-01-26 12:08:33

标签: c# asp.net caching iis

我使用HttpContext.Current.Cache使用CacheItemUpdateCallback缓存昂贵的数据查询。

这个想法是用户必须加载一次数据,然后updatecallback每隔30分钟更新一次对象。

这是我插入/覆盖缓存的方式:

HttpContext.Current.Cache.Insert(cacheID, cachedObject, null,
                                  expiryTimeStamp,
                                  Cache.NoSlidingExpiration,
                                  updateCallBack);   

出于测试原因,我设置了这样的到期日期(每20秒更新一次):

var expiryTimeStamp = DateTime.Now.Add(new TimeSpan(0, 0, 20));

一切正常。这意味着,它每20秒更新一次昂贵的物品 - 但只需要大约25分钟。然后触发“updateCallBack”'不再被召唤了!

我猜问题是IIS处理缓存所以回调' CacheItemUpdateCallBack'不再被解雇......但这只是猜测。

这引出了我的问题:

  

我是否需要在app.config或IIS中设置任何设置?或者我做错了什么?

修改 此外,我不明白为什么带有CacheItemUpdateCallback的Insert overload没有参数CacheItemPriority。 但是,overload with CacheItemRemovedCallback确实有一个优先级参数。也许,如果我可以将CacheItemPriority设置为' High'它已经解决了我的问题。

编辑:我发现了问题:每个应用程序池都有一个空闲超时属性,设置为20分钟。

2 个答案:

答案 0 :(得分:2)

应用程序池的idle timeout设置为20分钟(默认情况下)。因为它是一个测试实例,所以没有用户保持网站活着。

答案 1 :(得分:1)

如果您的猜测结果证明IIS过期缓存是正确的,那么this可能是您想要调整的设置。

但是我猜如果每次完成25分钟之后就会发生这种情况,那么你有一个隐藏的配置集,因为如果你没有指定缓存过期,那么只要进程正在运行或者如果存在,项目就会被缓存内存分配紧急情况。