【问题标题】:Is it possible to configure .Net Core to use the file system to cache responses?是否可以将 .Net Core 配置为使用文件系统来缓存响应?
【发布时间】:2019-09-04 09:05:10
【问题描述】:

具体来说,.Net Core(3.0 或更早版本)中是否有任何方法可以将本地文件系统用作响应缓存,而不仅仅是在内存中?

经过大量研究,最接近的似乎是响应缓存中间件 [1],但事实并非如此:

  1. 允许无限期缓存页面,
  2. 在应用程序和服务器重新启动之间保留缓存,
  3. 允许在每页的基础上使缓存失效(例如更新博客条目),
  4. 允许在进行全局更改(例如主题更新、菜单更改等)时使整个缓存失效。

我猜这些功能需要自定义实现 ResponseCaching 来访问本地文件系统,但如果它已经存在,我不想重新发明它。

一些背景:

这将取代我们使用静态站点生成器,由于数据量巨大(将近 24 小时生成并复制到所有服务器),这对于站点范围的更改是有问题的。

该场景与百科全书或新闻网站非常相似——绝大多数内容很少更改,每天都会添加一些内容,并且没有特定于用户的内容(如果有的话,它将通过 JS/Ajax 动态加载)。此外,页面加载恰好是处理器/内存/数据库密集型的。

我们将使用 CloudFlare 或 AWS CloudFront 等反向代理,但 AWS 每天都会自动使它们的边缘缓存过期。边缘节点缓存未命中仍然频繁。

这与 IDistributedCache [2] 的不同之处在于它应该是响应缓存,而不仅仅是缓存 MVC 模型使用的数据。

我们还将使用内存缓存 [3],但同样,这解决了不同的缓存场景。

参考文献

[1]https://docs.microsoft.com/en-us/aspnet/core/performance/caching/middleware

[2]https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed

[3]https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory

【问题讨论】:

  • 阅读:stackoverflow.com/help/on-topic。它可以帮助您理解为什么您被否决,以及为什么这篇文章的票数接近。这篇文章是题外话,因为您要求图书馆推荐。另外,你发了一次deleted it,然后又发了一次,这很烦人。
  • @R.Richards - 谢谢你的解释。在多次修改这个问题之后,它似乎已经不同到足以保证一个不同的问题,但我将来肯定会避免这样做。最终,我想使用“just .Net Core”,并且以一种与开箱即用的功能非常相似的方式使用。事实上,他们很可能只用一个我找不到的标志来提供该功能。 “图书馆”这个词可以说是放错了地方。感谢您引起我的注意。

标签: asp.net-core asp.net-core-mvc asp.net-core-middleware


【解决方案1】:
【解决方案2】:

目前(2019 年 4 月)的答案似乎是:,没有什么现成可用的。

使用 .Net Core 可以通过三种可行的方法实现此目的:

  1. fork 内置的 ResponseCaching 中间件并为缓存到磁盘创建一个标志:

    https://github.com/aspnet/AspNetCore/tree/master/src/Middleware/ResponseCaching

    这可能很烦人,因为命名空间和类名会与核心框架发生冲突。

  2. 在 EasyCaching 中实现这个缺失的功能,显然已经在他们的雷达上缓存到磁盘:

    https://github.com/dotnetcore/EasyCaching/blob/master/ToDoList.md

    拉取请求更有可能被接受,因为它是一项计划中的功能。

  3. 显然有一个 Strathweb.CacheOutput 到 .Net Core 的端口,这将允许实现 IApiOutputCache 以保存到磁盘:

    https://github.com/Iamcerba/AspNetCore.CacheOutput#server-side-caching

虽然这个问题是关于使用本地文件系统在 .Net Core 中进行缓存,但这也可以通过在每个服务器节点上使用 Sqlite 的本地实例来完成,然后配置 EasyCaching 以进行响应缓存并将其指向 Sqlite 实例在本地主机上。

我希望这对发现自己处于这种情况的其他人有所帮助!

【讨论】:

    猜你喜欢
    • 2022-07-29
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    • 2017-11-23
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    相关资源
    最近更新 更多