【问题标题】:Httpcontext current cache gets clearedHttpcontext 当前缓存被清除
【发布时间】:2016-06-20 09:12:00
【问题描述】:

我正在使用Insert方法将值存储到HttpContext.Current.Cache

HttpContext.Current.Cache.Insert(key, value, null, DateTime.Now.AddMinutes(1440), TimeSpan.Zero);

在我看来,这应该在 1440 分钟内将值存储在缓存中。但是不知何故,缓存被清除了,密钥不再存在。我上次检查时缓存在大约 30 分钟内保存。

缓存可以以某种方式清除吗?如果 AppPool 被回收或类似的东西?

【问题讨论】:

  • Insert 方法将覆盖现有的缓存项。您可以尝试 Add() 并检查您要覆盖的位置。如果您尝试使用相同的键添加值,则 Add 方法将失败。
  • 这并不能解释为什么那个键的缓存是空的

标签: c# caching httpcontext


【解决方案1】:

是的,缓存存储在内存中,直到进程停止,因此重新启动/重置 IIS 或回收应用程序池将清除缓存。如果是本地主机,构建应用也会清除缓存。

【讨论】:

  • 现在我不确定 IIS 是否已被回收。还有更多可能吗?
  • 会不会是应用程序池超时?我确实注意到它默认设置为 20 分钟
  • 是的,这也可能是原因,但我想知道它在 30 分钟前是如何工作的。知道应用程序在实际工作 30 分钟时是否活跃使用了大约 15 分钟?
  • 因为我不知道你的其他环境细节,我建议你做以下确认。 >> 设置apppool超时时间为5分钟,重启你的IIS,监控你的缓存是否存在5分钟,然后让它空闲10分钟再验证一次,如果过期,那么这就是丢失缓存数据的原因跨度>
  • 会试试的!谢谢:)
【解决方案2】:

你确定那段代码被执行了吗?在Cache.Insert 中同时设置AbsoulteExpirationSlidingExpiration 是非法的。如果执行,您的代码应该抛出 ArgumentException

看到这个link

正确的用法是

HttpContext.Current.Cache.Insert(key, item, null, dateExpiration, Cache.NoSlidingExpiration);

如果您想要 AbsoluteExpiration 1440 分钟,请使用 Cache.NoSlidingExpiration

HttpContext.Current.Cache.Insert(key, value, null, DateTime.Now.AddMinutes(1440), Cache.NoSlidingExpiration);

希望这会有所帮助。

【讨论】:

猜你喜欢
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多