Tutorial: Implementación del almacenamiento en caché con integraciones de .NET.NET Aspire
Las aplicaciones nativas de la nube suelen requerir varios tipos de soluciones de almacenamiento en caché escalables para mejorar el rendimiento. .NET Aspire integraciones simplifican el proceso de conexión a servicios populares de almacenamiento en caché, como Redis. En este artículo, aprenderá a:
- Cree una aplicación ASP.NET básica que esté configurada para usar .NET Aspire.
- Agregue .NET Aspire integraciones para conectarse a Redis e implementar caché.
- Configure las integraciones de .NET.NET Aspire para cumplir requisitos específicos.
En este artículo se explora cómo usar dos tipos diferentes de almacenamiento en caché de ASP.NET Core mediante .NET Aspire y Redis:
- almacenamiento en caché de salida: un método de almacenamiento en caché configurable y extensible para almacenar respuestas HTTP completas para futuras solicitudes.
- almacenamiento en caché distribuido: una caché compartida por varios servidores de aplicaciones que permite almacenar en caché datos específicos. Normalmente, una caché distribuida se mantiene como un servicio externo a los servidores de aplicaciones que acceden a ella y pueden mejorar el rendimiento y la escalabilidad de una aplicación ASP.NET Core.
Prerrequisitos
Para trabajar con .NET.NET Aspire, necesita lo siguiente instalado localmente:
- .NET 8.0 o .NET 9.0
- Un entorno de ejecución de contenedor compatible con OCI, como:
- Docker Escritorio o Podman. Para obtener más información, consulte container runtime.
- Un entorno para desarrolladores integrado (IDE) o un editor de código, como:
- Visual Studio 2022 versión 17.9 o posterior (opcional)
-
Visual Studio Code (opcional)
- C# Dev Kit: extensión (opcional)
- JetBrains Rider con .NET.NET Aspire complemento (opcional)
Para obtener más información, consulte configuración y herramientas de .NET.NET Aspirey sdk de .NET.NET Aspire.
Creación del proyecto
- En la parte superior de Visual Studio, vaya a Archivo>Nuevo proyecto de>....
- En la ventana de diálogo, escriba .NET Aspire en el cuadro de búsqueda de la plantilla de proyecto y seleccione .NET.NET Aspire Aplicación de inicio. Elija Siguiente.
- En la pantalla Configura tu nuevo proyecto:
- Escriba un nombre de proyecto de
de AspireRedis . - Deje el rest de los valores en sus valores predeterminados y seleccione Siguiente.
- Escriba un nombre de proyecto de
- En la pantalla Información adicional:
- Asegúrese de que .NET 9.0 está seleccionado.
- Desmarque Usar Redis para almacenar en caché. Implementará su propia configuración de almacenamiento en caché.
- Seleccione Crear.
Visual Studio crea una nueva solución de .NET Aspire que consta de los siguientes proyectos:
- AspireRedis.Web: un proyecto de interfaz de usuario de Blazor con configuraciones de .NET Aspire predeterminadas.
- AspireRedis.ApiService: una API mínima con configuraciones de .NET.NET Aspire predeterminadas que proporcionan el front-end con datos.
- AspireRedis.AppHost: un proyecto de orquestador diseñado para conectar y configurar los diferentes proyectos y servicios de la aplicación.
- AspireRedis.ServiceDefaults: un proyecto compartido de .NET.NET Aspire para administrar configuraciones que se reutilizan en los proyectos de la solución relacionadas con resiliencia, descubrimiento de serviciosy telemetría.
Configuración del proyecto host de aplicación
Agregue el paquete NuGet 📦Aspire.Hosting.Redis al proyecto
AspireRedis.AppHost
:- CLI de .NET
- PackageReference
dotnet add package Aspire.Hosting.Redis
Para obtener más información, consulte dotnet add package o Gestionar dependencias de paquetes en .NET aplicaciones.
Actualice el archivo Program.cs del proyecto de
AspireRedis.AppHost
para que coincida con el código siguiente:var builder = DistributedApplication.CreateBuilder(args); var redis = builder.AddRedis("cache"); var apiservice = builder.AddProject<Projects.AspireRedis_ApiService>("apiservice") .WithReference(redis); builder.AddProject<Projects.AspireRedis_Web>("webfrontend") .WithExternalHttpEndpoints() .WithReference(apiservice) .WithReference(redis); builder.Build().Run();
El código anterior crea una instancia de contenedor de Redis local y configura la interfaz de usuario y la API para usar la instancia automáticamente para el almacenamiento en caché distribuido y de salida. El código también configura la comunicación entre la interfaz de usuario de front-end y la API de back-end mediante la detección de servicios. Con la detección de servicios implícita de .NET.NET Aspire, la configuración y administración de conexiones de servicio se simplifica para la productividad del desarrollador. En el contexto de este tutorial, la función simplifica cómo conectar a Redis.
Tradicionalmente, especificaría manualmente la cadena de conexión Redis en el archivo appsettings.json de cada proyecto:
{
"ConnectionStrings": {
"cache": "localhost:6379"
}
}
La configuración de la cadena de conexión con este método, aunque funcional, requiere duplicar la cadena de conexión en varios proyectos, lo que puede ser complicado y propenso a errores.
Configurar la interfaz de usuario con caché de resultados
Agregue los paquetes de integración de .NET Aspire Stack Exchange Redis caché de salida a su aplicación
AspireRedis.Web
.dotnet add package Aspire.StackExchange.Redis.OutputCaching
En el archivo Program.cs del proyecto
AspireRedis.Web
Blazor, inmediatamente después de la líneavar builder = WebApplication.CreateBuilder(args);
, agregue una llamada al método de extensión AddRedisOutputCache.builder.AddRedisOutputCache("cache");
Este método realiza las siguientes tareas:
- Configura la caché de salida de ASP.NET Core para usar una instancia de Redis con el nombre de conexión especificado.
- Habilita automáticamente las comprobaciones de estado, el registro y la telemetría correspondientes.
Reemplace el contenido del archivo Home.razor del proyectoBlazor
AspireRedis.Web
por lo siguiente:@page "/" @attribute [OutputCache(Duration = 10)] <PageTitle>Home</PageTitle> <h1>Hello, world!</h1> Welcome to your new app on @DateTime.Now
La integración incluye el atributo
[OutputCache]
, que almacena en caché toda la respuesta representada. La página también incluye una llamada a@DateTime.Now
para ayudar a comprobar que la respuesta está almacenada en caché.
Configuración de la API con almacenamiento en caché distribuido
Agregue los paquetes de integración .NET Aspire Stack Exchange de almacenamiento en caché distribuidoRedis a su aplicación
AspireRedis.ApiService
.dotnet add package Aspire.StackExchange.Redis.DistributedCaching
En la parte superior del archivo Program.cs, agregue una llamada a AddRedisDistributedCache:
builder.AddRedisDistributedCache("cache");
En el archivo Program.cs, agregue las siguientes instrucciones
using
:using System.Text; using System.Text.Json; using Microsoft.Extensions.Caching.Distributed;
En el archivo Program.cs, reemplace el código de punto de conexión de
/weatherforecast
existente por lo siguiente:app.MapGet("/weatherforecast", async (IDistributedCache cache) => { var cachedForecast = await cache.GetAsync("forecast"); if (cachedForecast is null) { var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast ( DateOnly.FromDateTime(DateTime.Now.AddDays(index)), Random.Shared.Next(-20, 55), summaries[Random.Shared.Next(summaries.Length)] )) .ToArray(); await cache.SetAsync("forecast", Encoding.UTF8.GetBytes(JsonSerializer.Serialize(forecast)), new () { AbsoluteExpiration = DateTime.Now.AddSeconds(10) }); ; return forecast; } return JsonSerializer.Deserialize<IEnumerable<WeatherForecast>>(cachedForecast); }) .WithName("GetWeatherForecast");
Prueba local de la aplicación
Pruebe el comportamiento de almacenamiento en caché de la aplicación mediante los pasos siguientes:
- Ejecute la aplicación mediante Visual Studio presionando F5.
- Si aparece el cuadro de diálogo Inicio de Docker Escritorio, seleccione Sí para iniciar el servicio.
- El panel de .NET.NET Aspire se carga en el navegador y enumera los proyectos de interfaz de usuario y API.
Pruebe la caché de salida:
- En la página de proyectos, en la fila del webfrontend de
, haga clic en el vínculo de la columna Endpoints de para abrir la interfaz de usuario de tu app. - La aplicación mostrará la hora actual en la página principal.
- Actualice el navegador cada pocos segundos para ver la misma página devuelta por el caché de salida. Después de 10 segundos, la memoria caché expira y la página vuelve a cargarse con una hora actualizada.
Pruebe la caché distribuida:
- Vaya a la página de clima en la UI de Blazor para cargar una tabla de datos meteorológicos aleatorios.
- Actualice el explorador cada pocos segundos para ver los mismos datos meteorológicos devueltos por el almacenamiento en caché de salida. Después de 10 segundos, la memoria caché expira y la página vuelve a cargarse con los datos meteorológicos actualizados.
¡Felicidades! Configuró una aplicación de ASP.NET Core para usar el almacenamiento en caché distribuido y de salida con .NET Aspire.