Caching 将整个响应缓存到分布式缓存(Redis)
我想将整个页面缓存到ASP.NET Core 2.1 MVC web应用程序中的分布式缓存(特别是Redis)中。当用户访问一个页面时,将执行action方法和view cshtml中的代码,并生成一个页面并发送给用户。我希望这个页面在请求结束时被缓存,这样当后续用户访问该页面时,它应该从缓存中显示出来,而不必在action方法或视图中执行任何代码。更具体地说,我希望它被缓存在Redis中。我熟悉如何从web应用程序在Redis中存储键值对,也熟悉如何将部分页面缓存到Redis,但我不知道如何将整个页面缓存到Redis 我成功地使用了特定于Redis的Caching 将整个响应缓存到分布式缓存(Redis),caching,asp.net-core,redis,asp.net-core-mvc,asp.net-core-2.0,Caching,Asp.net Core,Redis,Asp.net Core Mvc,Asp.net Core 2.0,我想将整个页面缓存到ASP.NET Core 2.1 MVC web应用程序中的分布式缓存(特别是Redis)中。当用户访问一个页面时,将执行action方法和view cshtml中的代码,并生成一个页面并发送给用户。我希望这个页面在请求结束时被缓存,这样当后续用户访问该页面时,它应该从缓存中显示出来,而不必在action方法或视图中执行任何代码。更具体地说,我希望它被缓存在Redis中。我熟悉如何从web应用程序在Redis中存储键值对,也熟悉如何将部分页面缓存到Redis,但我不知道如何将
IDistributedCache
接口实现,将键值对存储到Redis。这是通过安装Microsoft.Extensions.Caching.Redis.Core NuGet包并将以下语句添加到ConfigureServices()
中实现的:
完成后,我就可以将RedisIDistributedCache
实现注入控制器,然后使用类似于\u cache.GetStringAsync()
和\u cache.SetStringAsync()
的语句来存储和检索Redis的键值对。我还可以在.cshtml页面中使用
标记帮助程序来缓存视图的一部分
但是,这些技术不能帮助我缓存整个页面,只能缓存其中的一部分。操作和视图中的代码仍然需要执行,页面需要重新呈现,尽管由于缓存了部分页面,因此速度更快。我想做的是缓存整个页面,这样就可以从缓存中提供所有内容,而无需执行action方法和view cshtml中的代码
我还了解如何在ASP Core 2.1中使用内置功能实现基本页面缓存。只需将[responseCache(Duration=…)]
属性添加到action方法中,分别在Startup.cs中将语句services.addresponseCache()
和app.UseResponseCaching()
添加到ConfigureServices()
和Configure()
不幸的是,页面被缓存在服务器实例上,可能在服务器的内存中。我不知道如何告诉它将此页面缓存在Redis中
基本上,我想要类似于[响应缓存(Duration=…,CACHE=REDIS)]
的东西。如何做到这一点
旧的ASP.NET 4等效版本 在ASP.NET 4中,只需向操作添加一个
[OutputCache(Duration=…)]
属性,安装Microsoft.Web.RedisOutputCacheProvider NuGet包,并将以下内容放入Web.config中
<caching>
<outputCache defaultProvider="MyRedisOutputCache">
<providers>
<add name="MyRedisOutputCache" type=... host="" ssl="true" />
</providers>
</outputCache>
</caching>
整个页面随后将被缓存到Redis。这真的很简单。这正是我试图在ASP Core 2.1中复制的功能。您可以使用ASP.NET MVC操作过滤器 覆盖OnResultExecuted以将最终结果存储在Redis缓存中 检查OnActionExecuting中是否存在缓存 html视图准备就绪后的OnResultExecuted调用,因此可以存储呈现的html OnActionExecuting调用在操作之前执行,以便您可以从缓存加载数据。
检查此中的ASP.NET MVC操作筛选器。这是默认实现。这里重要的一点是它实现了
IResponseCache
,因此请将此作为使用IDistributedCache
实现响应缓存的指南。
<caching>
<outputCache defaultProvider="MyRedisOutputCache">
<providers>
<add name="MyRedisOutputCache" type=... host="" ssl="true" />
</providers>
</outputCache>
</caching>