在我的项目中,我们使用 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
);