c# - .Net 缓存过期

标签 c# .net caching

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

现在发生的问题是:

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

在这种情况下,缓存会填充所有字段的空值,并且不会重新填充最多 4 小时的缓存(直至再次过期)。

我正在寻找两种解决方案: 1)我们可以在缓存过期之前更新缓存,然后调用网络服务。如果 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
             );

最佳答案

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

关于c# - .Net 缓存过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12647921/

相关文章:

c++ - 混淆后您的代码有多安全?

.net - 更新 VB.NET 中的 MySQL 字段

java - 如何迭代缓存条目

ruby-on-rails - Rails 3.2.8,只有重启服务器才会取消缓存模型

c# - 来自 C# 的多个更新和插入

c# - 我可以在 IIS 中禁用大量更改通知吗

c# - Entity Framework 6 SaveChanges 导致唯一约束异常

c# - 检测是否手动调用了 AuthorizationAttribute

c# - 运行 xUnit.net 测试时的运行时文件夹结构

sql - 缓存 SQL 查询