2012-09-28 95 views
4

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

现在发生的问题是:

有时,建立Web服务和数据库,因此,网络服务不返回数据之间的连接有问题。

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

我在寻找2种解决方案: 1)我们可以在缓存到期前更新缓存,然后调用Web服务。如果Web服务获取数据,则覆盖缓存。 2)缓存永不过期,并且每隔一段时间我们都会产生一个线程,如果我们获取数据,就会更新缓存。

但我不知道如何实现上述解决方案?有人能给我一些关于技术部分的见解吗?谢谢您的帮助!

MY填充缓存的当前代码:

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 
      ); 

回答

4

强似空的,实行CacheItemRemovedCallback作为最后一个参数来Cache.Insert(..)。当检索值 以重新填充缓存时,您可以执行空检查并暂时使用旧值。

+0

我接受这是最可行的解决方案。但我在这里有一个问题:在应用程序池回收期间会发生什么? cacheitemremovedcallback会在重启过程中被触发吗?如果是的话,它会有旧的缓存值? – user1165815