【发布时间】:2012-09-20 19:20:05
【问题描述】:
在我的项目中,我们使用 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
);
【问题讨论】: