【问题标题】:.NET Caching - cache expires very early.NET 缓存 - 缓存很早就过期
【发布时间】:2017-11-13 10:02:00
【问题描述】:

我正在尝试使用 .Net 4.5 中的 MemoryCache 将对象存储 1 个月(绝对过期 - 从创建缓存起 1 个月)。

问题 - 缓存似乎会在一天内过期 - 实际上有时会在几个小时内过期。

代码片段

// Setting the cache with absolute expiration time of 1 month:
string objName = "myObj";
MemoryCache memCache = MemoryCache.Default;
memCache.Add(tokenID, myObj, DateTimeOffset.UtcNow.AddMonths(1));

// Accessing the cache later
MemoryCache getCache = MemoryCache.Default;
getCache.Get(tokenID);

问题

  1. 我是否正确设置了缓存?我还没有看到任何使用 AddMonths() 的示例,但是有很多使用 AddDays() 的示例——但这有关系吗?
  2. 是否有我可以用于绝对到期的最长时间? (我还没有遇到任何设置缓存超过 30 天,同时没有使用无限过期时间的示例。)
  3. 还有什么可能导致缓存如此快过期?

非常感谢!

【问题讨论】:

  • 网络服务器是否有在空闲时关闭站点的设置,是否有持续的流量来阻止这种情况发生?
  • @SamiKuhmonen - 我站点的应用程序池设置有空闲超时 = 5 分钟和关闭时间限制 = 90 秒。你是在说这些吗?
  • 是的,正是这些。这意味着如果五分钟内没有对您的站点的请求,则工作人员将被关闭,这也会从内存缓存中删除所有内容。这很可能是导致问题的原因。
  • @SamiKuhmonen - 啊!一定是这样的。非常感谢!

标签: c# .net caching memorycache


【解决方案1】:

检查您用于 Web 应用程序的 IIS AppPool 设置。在高级设置下,有一个空闲超时(分钟)设置。如果您的站点空闲时间超过此时间,则工作进程将关闭。

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2020-08-20
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多