ASP.NET Core Almacenamiento en caché de respuestas con IDistributedCache
ASP.NET Core proporciona un Almacenamiento en caché de respuestas que le permite almacenar en caché la respuesta del servidor de una solicitud de cliente para futuras solicitudes.
El almacenamiento en caché de respuestas aumenta el rendimiento de la aplicación a medida que la respuesta se entrega desde el caché. Además, elimina la carga de procesamiento de los servidores, ya que no necesitan procesar y generar una respuesta para la misma solicitud nuevamente.
Note
Para opciones avanzadas sobre el almacenamiento en caché de respuestas usando dependencia, vaya a ASP.NET Core Almacenamiento en caché de respuestas.
¿Cuándo utilizar el almacenamiento en caché de respuestas con IDistributedCache?
El almacenamiento en caché de respuestas se puede utilizar para almacenar en caché elementos de la aplicación que son estáticos y tienen muy poca frecuencia de modificación. Esto incluye archivos CSS/JavaScript, medios o metadatos de una página web. Por lo tanto, en lugar de volver a solicitar el contenido al servidor, estos datos se pueden recuperar del caché.
Opciones de almacenamiento en caché de respuestas
Almacenamiento en caché basado en HTTPS
Almacena en caché los datos en el extremo del navegador web en el cliente. Esto reduce la cantidad de solicitudes que un cliente realiza al servidor web, ya que cualquier solicitud posterior será atendida por el caché en lugar del servidor web. Sin embargo, una vez que la respuesta se almacena en caché en el navegador, solo caducará una vez que finalice el tiempo de almacenamiento en caché asignado y no se podrá borrar cuando sea necesario.
Almacenamiento en caché en memoria
Cachés de datos en la memoria del servidor, usando ASP.NET CoreEl propio proveedor de almacenamiento en caché interno. Esta opción es más flexible para almacenar en caché las respuestas como ASP..NET Core proporciona un Ayudante de etiquetas de caché que permite agregar etiquetas para especificar qué vista de la aplicación MVC debe almacenarse en caché. Dado que se trata de InProc, puede reiniciar el motor ASP.NET para borrar el caché cuando sea necesario.
Almacenamiento en caché distribuido
Almacena en caché los datos en memoria, si la aplicación está alojada en una granja de servidores web. El caché se distribuye entre todos los servidores de la granja web y cualquier servidor puede responder al cliente si los datos solicitados están disponibles en el caché. Similar al almacenamiento en caché en memoria, Ayudante de etiquetas de caché distribuidas permite especificar vistas exactas que deben almacenarse en caché. Aquí es donde NCache entra en juego, ya que se puede utilizar como caché distribuido para el almacenamiento en caché de respuestas a través de su interfaz IDistributedCache. Además, esto extiende más control a su aplicación ya que el caché es escalable y los elementos se pueden eliminar del caché cuando sea necesario.
Usar NCache para el almacenamiento en caché de respuestas
Para utilizar NCache como caché distribuido para el almacenamiento en caché de respuestas, NCache proporciona sus propios métodos de extensión para configurar servicios y middleware.
Requisitos previos
- Instale los siguientes paquetes de NuGet en su aplicación:
- Empresa: NCache.Extensiones.de.Microsoft.Almacenamiento en caché
- Profesionales: NCache.Microsoft.Extensions.Caching.Profesional
- Fuente abierta: NCache.Microsoft.Extensions.Caching.OpenSource
- Para utilizar NCacheLos métodos de almacenamiento en caché de respuestas incluyen el siguiente espacio de nombres en su aplicación:
- El caché debe estar ejecutándose.
- Para obtener detalles de la API, consulte: AgregarRespuestaAlmacenamiento en caché.
- Asegúrese de que los datos que se agregan sean serializable.
- Para garantizar que la operación sea a prueba de fallas, se recomienda manejar cualquier posible excepción dentro de su aplicación, como se explica en Manejo de fallas.
- Para manejar cualquier excepción no vista, consulte el Solucionando Problemas .
Configurar el servicio de almacenamiento en caché de respuestas
ASP.NET Core proporciona su propio middleware para el almacenamiento en caché de respuestas. Esto debe agregarse a la colección de servicios utilizando el AgregarRespuestaAlmacenamiento en caché método.
Abierto Inicio.cs de tu proyecto.
En
ConfigureServices
método, agregue el siguiente servicio:
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching();
// Remaining services here
}
Configurar NCache como caché distribuida
NCache proporciona métodos personalizados a través de IDistributedCache para configurarse como un caché distribuido para aplicaciones ASP.NET. Esto requiere sólo un nombre de caché en NCache y cualquier configuración opcional para almacenar el contenido MVC.
Método 1: especificar la configuración de caché en AppSettings.json
Las configuraciones de caché se pueden agregar como una sección separada en Configuración de aplicaciones.json de su aplicación. El siguiente ejemplo agrega una sección NCacheSettings
que configura el nombre de caché. Puede cambiar el nombre de acuerdo con su caché registrada.
Importante:
Asegúrese de que la memoria caché especificada se esté ejecutando.
. . .
"NCacheSettings": {
"CacheName": "demoCache",
"EnableLogs": "True",
"ExceptionsEnabled": "True"
}
. . .
Una vez especificada la configuración de la caché, NCache Se deben agregar servicios para configurar. NCache como un caché distribuido en la aplicación.
Abierto Inicio.cs de tu proyecto.
En
ConfigureServices
método, agregue los siguientes servicios:AddNCacheDistributedCache
El método de extensión inicializa las configuraciones desde Configuración de aplicaciones.json antes de agregar los servicios al contenedor y agrega NCache como caché distribuido predeterminado como una implementación deIDistributedCache
.
public void ConfigureServices(IServiceCollection services)
{
// Add NCache services to the container
services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
}
Método 2: especificar la configuración en IOptions
Otro método para especificar configuraciones es proporcionar ajustes de configuración como IOptions
.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services
services.AddMvc();
services.AddNCacheDistributedCache(configuration =>
{
configuration.CacheName = "demoCache";
configuration.EnableLogs = true;
configuration.ExceptionsEnabled = true;
});
}
Agregar ayudante de etiquetas de caché distribuidas para ver la clase
En el momento que todos los DARWINs coticen incluyendo los deslizamientos NCache Los servicios se han configurado para el almacenamiento en caché de respuestas, ahora puede especificar el contenido específico de las vistas del controlador que desea almacenar en caché. ÁSPID.NET Core proporciona un Ayudante de etiquetas de caché distribuidas para agregar etiquetas con parámetros al Vistas que almacenará en caché el contenido marcado en el caché configurado.
El siguiente ejemplo agrega el <distributed-cache>
etiquetar el contenido en Vistas -> Acerca de.cshtml con parámetros variables. Al actualizar la aplicación, el contenido, elemento normal, cambiará según DateTime.Now
, mientras que el contenido etiquetado permanecerá estático mientras se almacena en caché.
El proyecto
expires-after
El atributo especifica la caducidad absoluta del contenido. Este elemento se eliminará del caché una vez que transcurran 10 segundos. Sin embargo, si se actualiza la aplicación, los elementos se recargan en la memoria caché.El proyecto
name
El atributo es el identificador único de la memoria caché para cada instancia del asistente de etiquetas.El proyecto
vary-by
El atributo mantiene el elemento en la caché hasta que la cadena de consulta en la URL sea la misma para el valor especificado en esta etiqueta.
Para obtener más detalles sobre los parámetros, consulte la Documentación de Microsoft para asistentes de etiquetas antes de continuar.
Una vez que se ejecuta la aplicación, puede monitorear las estadísticas de la caché a través del NCache Centro de Gestión/NCache Monitor para Enterprise o contadores PerfMon para Professional.
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<p> The value for this item will change everytime the application is refreshed.</p>
<div>@DateTime.Now.ToString()</div><br />
<p>The value for this item will be static and remain in the cache forever, unless cache is cleared.</p>
<distributed-cache name="Key:1" >
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
<p>The value for this item will be static upon refreshing the application, but it will expire after 10 seconds.</p>
<distributed-cache name="Key:2" expires-after ="TimeSpan.FromSeconds(10)">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
<p>The value for this item will be static and will only be removed from cache if the "vary-by" value is changed.</p>
<distributed-cache name="Key:3" vary-by ="test">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
Recursos adicionales
NCache proporciona una aplicación de ejemplo para el almacenamiento en caché de respuestas en GitHub.
Vea también
.NETO: Alachisoft.NCache.ResponseCaching; espacio de nombres