具体地说,.Net Core(3.0或更早版本)中是否有任何方法可以将本地文件系统用作响应缓存,而不仅仅是内存中?
经过大量研究,最近的东西似乎是响应缓存中间件[1],但这不是:
我猜想这些功能将需要自定义实现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
答案 0 :(得分:1)
我实现了这一点。 https://www.nuget.org/packages/AspNetCore.ResponseCaching.Extensions/ https://github.com/speige/AspNetCore.ResponseCaching.Extensions
但是尚不支持.net core 3。
答案 1 :(得分:-1)
当前(2019年4月)的答案似乎是:否,对此没有现成的方法。
使用.Net Core可以通过三种可行的方法来完成此任务:
分叉内置的ResponseCaching中间件并为高速缓存到磁盘创建标志:
https://github.com/aspnet/AspNetCore/tree/master/src/Middleware/ResponseCaching
由于名称空间和类名称将与核心框架冲突,因此维护起来可能很烦人。
在EasyCaching中实现此缺失的功能,该功能显然已经在其雷达上缓存到磁盘:
https://github.com/dotnetcore/EasyCaching/blob/master/ToDoList.md
由于是计划功能,因此更可能接受拉取请求。
显然,Strathweb.CacheOutput到.Net Core有一个端口,该端口将允许实现IApiOutputCache保存到磁盘:
https://github.com/Iamcerba/AspNetCore.CacheOutput#server-side-caching
尽管此问题是关于使用本地文件系统在.Net Core中进行缓存的,但也可以通过在每个服务器节点上使用Sqlite的本地实例,然后配置EasyCaching进行响应缓存并将其指向Sqlite实例来实现。在本地主机上。
我希望这对在这种情况下找到自己的人有所帮助!