Uso de una caché distribuida de Redis

Completado

En una aplicación nativa de la nube, los equipos independientes crean microservicios con sus tecnologías preferidas según sus propias programaciones. Los microservicios suelen funcionar completamente de forma independiente. Pueden beneficiarse del almacenamiento en caché, pero, si ejecutan cachés independientes, es posible que no puedan obtener la mejora óptima del rendimiento. Si proporciona una sola caché para varios microservicios, esos servicios pueden recuperar información de la memoria caché almacenada por otro microservicio.

Imagine que trabaja para un distribuidor de equipamiento para actividades al aire libre. Ha decidido implementar el almacenamiento en caché mediante un servidor de Redis en el microservicio del carro de la compra. Sin embargo, también quiere asegurarse de que otros microservicios pueden beneficiarse de la información que almacena en caché.

En esta unidad, aprenderá cómo una caché distribuida de Redis puede optimizar el rendimiento de varios microservicios en la aplicación. También verá cómo .NET Aspire facilita la implementación de una caché distribuida.

¿Qué es el almacenamiento en caché distribuido?

Una caché distribuida es una que se comparte entre varios servicios de llamada. En una aplicación nativa de la nube, los servicios de llamada suelen ser microservicios. Al almacenar información, por ejemplo, los detalles de un producto popular en el catálogo, en la caché distribuida, todos los microservicios de la aplicación pueden usarlos y obtener una mejora del rendimiento.

Configuración del almacenamiento en caché distribuido en .NET Aspire

Para usar el almacenamiento en caché distribuido, se requieren cambios en el proyecto host de la aplicación y en los microservicios que usan la memoria caché.

Configuración del host de la aplicación

En el proyecto host de la aplicación de la solución, empiece por instalar el componente de hospedaje de almacenamiento en caché distribuido:

dotnet add package Aspire.Hosting.Redis --prerelease

Como alternativa, puede usar el acceso directo Agregar > componente aspire de .NET en Visual Studio para instalar el componente desde el administrador de paquetes NuGet:

Captura de pantalla que muestra el administrador de paquetes NuGet en Visual Studio con el componente de almacenamiento en caché de .NET Aspire.

Una vez instalado el componente de hospedaje, el código del archivo Program.cs del host de la aplicación registra la memoria caché y lo pasa a los proyectos que usan la memoria caché:

// Register the cache
var redis = builder.AddRedis("redis");

// Initiate the consuming project and pass the cache
builder.AddProject<Projects.ConsumingProject>()
       .WithReference(redis);

Configuración de los proyectos de consumo

Para instalar el componente De caché distribuida de .NET Aspire en un microservicio, use un comando como este en los proyectos de .NET Aspire:

dotnet add package Aspire.StackExchange.Redis.DistributedCache --prerelease

De nuevo, también puede optar por usar el administrador de paquetes NuGet para instalar el componente:

Captura de pantalla que muestra el administrador de paquetes NuGet en Visual Studio con componentes de almacenamiento en caché de .NET Aspire.

Uso de una caché distribuida

En cualquier proyecto en el que quiera usar la memoria caché, debe obtener un objeto de caché distribuida, que representa la conexión a Redis. En el archivo Program.cs, este código registra la caché distribuida:

builder.AddRedisDistributedCache("cache")

Una vez registrada la memoria caché en el proyecto de consumo, puede recuperar la caché distribuida en cualquier momento que la necesite mediante la inserción de dependencias:

public class MyService(IDistributedCache cache)
{
   public async Task InitializeAsync()
   {
      // Check if there is cached content
      var cachedInfo = await cache.GetAsync("myinfo")

      if (cachedInfo is null)
      {
         // There's no content in the cache so formulate it here
         // For example, query databases.

        // Store the content in the cache
        await cache.SetAsync("myinfo", cachedInformation, new()
           { AbsoluteExpiration = DateTime.Now.AddSeconds(60) }
        );
      }
   }
}

Configuración

Para que los microservicios se conecten a la caché distribuida de Redis, debe indicarles dónde está proporcionando una cadena de conexión. La llamada anterior al método AddRedisDistributedCache() especificó una cadena de conexión denominada redis.

Use una sección ConnectionStrings en el archivo de configuración, por ejemplo, en appsettings.json, para configurar la cadena de conexión:

{
  "ConnectionStrings": {
    "redis": "redis.contoso.com:6379"
  }
}

También puede usar appsettings.json para configurar el comportamiento del componente de almacenamiento en caché distribuido. Por ejemplo, este código configura la conexión para que se agote el tiempo de espera después de cinco segundos y vuelva a intentarlo tres veces:

{
  "Aspire": {
    "StackExchange": {
      "Redis": {
        "ConfigurationOptions": {
          "ConnectTimeout": 5000,
          "ConnectRetry": 3
        }
      }
    }
  }
}

También puede configurar la conexión mediante delegados insertados en el método AddRedisDistributedCache(). Este código configura las mismas propiedades que el ejemplo json anterior:

builder.AddRedisDistributedCache(
   "redis",
   configureOptions: options => options.ConnectTimeout = 5000
);

Saber más