【问题标题】:.Net Cache expiration.Net 缓存过期
【发布时间】: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
             );

【问题讨论】:

    标签: c# .net caching


    【解决方案1】:

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

    【讨论】:

    • 我接受这是最可行的解决方案。但是我在这里有一个问题:在应用程序池回收期间会发生什么?重启期间会触发 cacheitemremovedcallback 吗?如果是这样,它会有旧的缓存值吗?
    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 2012-11-18
    • 2014-12-23
    • 2013-06-03
    • 1970-01-01
    • 2018-05-31
    • 2020-08-20
    • 2012-02-09
    相关资源
    最近更新 更多