.Net缓存过期

时间:2012-09-28 21:59:03

标签: c# .net caching

在我的项目中,我们使用Web服务从数据库中获取数据,并将数据从Web服务填充到缓存中。 我使用Absolute expiration,持续时间设置为4小时。 因此,4小时后,缓存过期,因此调用Web服务以重新填充缓存中的数据。

现在发生的问题是:

有时在Web服务和数据库之间建立连接时出现问题,因此Web服务不会返回数据。

在这种情况下,缓存将填充所有字段的空值和最多4小时的缓存(直到它再次到期的时间),不会重新填充。

我正在寻找两种解决方案: 1)我们可以在缓存过期之前更新缓存,然后调用Web服务。如果Web服务获取数据,则覆盖缓存。 2)缓存永不过期,我们经常会产生一个线程,如果我们收回数据,它会更新缓存。

但我不确定如何实施上述解决方案?有人可以给我一些关于技术部分的见解吗?谢谢你的帮助!

我目前填充缓存的代码:

ctx.Cache.Insert("cachename", cacheValue, null,
              DateTime.Now.AddHours(Int32.Parse(siteViewModel.ApplicationSettings["CacheDurationHours"])), System.Web.Caching.Cache.NoSlidingExpiration, 
             System.Web.Caching.CacheItemPriority.Default,
             null
             );

1 个答案:

答案 0 :(得分:4)

不是传递null,而是将CacheItemRemovedCallback实现为Cache.Insert(..)的最后一个参数。检索值时 要重新填充缓存,您可以进行空检查并暂时使用旧值。