【问题标题】:MemoryCacheEntryOptions cache is not cleared after AbsoluteExpirationRelativeToNow is expiredAbsoluteExpirationRelativeToNow 过期后不清除 MemoryCacheEntryOptions 缓存
【发布时间】:2019-07-27 13:40:48
【问题描述】:

我已将示例 webapp 部署到 Azure。该应用使用 MemoryCacheEntryOptions 缓存了一个变量来存储一个值(来自数据库),该值在 5 分钟后到期。

但是通过 Chrome 调试工具 5 分钟后,我仍然可以查询缓存,缓存值预计为空或任何当前存储在数据库中的新值更新。

我什至尝试在网络浏览器中清除缓存,但缓存似乎仍然保留以前的值。

但是,当我重新启动网站并再次打开网络应用程序时,缓存值不再存在。

Azure 中的任何设置是否会影响缓存过期?

private readonly MemoryCacheEntryOptions _cacheEntryOptions;
protected CacheService(IMemoryCache memoryCache)
{
    _ memoryCache = memoryCache;
 _cacheEntryOptions = new MemoryCacheEntryOptions
  { 
    AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(300)
  };
}

【问题讨论】:

  • 您创建了一个MemoryCacheEntryOptions 并将其保存到一个字段中,但从不使用它。这些设置未附加到您的内存缓存
  • 你的代码看起来有点乱。只有在调用IMemoryCache.Set 方法时,才应该创建MemoryCacheEntryOptions 的实例。这些选项必须被实例化并仅在您想在缓存中保存某些内容时使用。此外,Web 浏览器缓存与您的服务器端内存缓存无关。服务器端应用程序缓存功能与 Web 浏览器 HTTP 缓存之间没有关系。如何使用 Google Chrome 开发工具验证服务器端代码的行为?

标签: c# asp.net caching


【解决方案1】:

众所周知,调试 Web 应用程序的行为非常困难,因为您只能通过浏览器来控制它 - 而且您永远无法获得独占访问权限。

即使您没有刷新页面,任何数量的东西都可能会查询服务器。罪魁祸首从“任何搜索引擎网络爬虫”开始,到“有点激进的安全工具”结束(因为某些病毒可能使用网络服务器)。您可以尝试一种更短的超时方式。但理想情况下,您希望服务器和访问它的客户端都在单独的虚拟机中运行,这些虚拟机仅通过 Hypervisor 连接。这样你就可以确定没有人干扰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2013-01-09
    • 2017-01-30
    • 2014-02-04
    相关资源
    最近更新 更多