Como usar um cache distribuído do Redis

Concluído

Em um aplicativo nativo de nuvem, equipes separadas criam microsserviços com as tecnologias que elas preferem de acordo com os respectivos cronogramas. Em geral, os microsserviços operam de maneira totalmente independente. Eles podem se beneficiar do cache, mas, se executarem caches separados, talvez não consigam realizar o aprimoramento de desempenho ideal. Se você fornecer um só cache para vários microsserviços, esses serviços poderão recuperar as informações do cache armazenadas por outro microsserviço.

Imagine que você trabalha para um varejista de equipamentos para atividades ao ar livre. Você decidiu implementar o cache usando um servidor Redis no microsserviço do carrinho de compras. No entanto, você também deseja garantir que outros microsserviços possam se beneficiar das informações armazenadas em cache.

Nesta unidade, você aprenderá como um cache Redis distribuído pode otimizar o desempenho para vários microsserviços no seu aplicativo. Você também verá como o .NET Aspire facilita a implementação de um cache distribuído.

O que é um cache distribuído?

Um cache distribuído é aquele que é compartilhado entre vários serviços de chamada. Em um aplicativo nativo de nuvem, em geral, os serviços de chamada são microsserviços. Quando você armazena algumas informações, por exemplo, os detalhes de um produto popular no seu catálogo, no cache distribuído, todos os microsserviços do seu aplicativo podem usá-lo e se beneficiar com o aprimoramento de desempenho.

Como configurar o cache distribuído no .NET Aspire

Para usar o cache distribuído, as alterações são necessárias no projeto de host do aplicativo e nos microsserviços que usam o cache.

Configurar o host do aplicativo

No projeto de host do aplicativo da solução, comece instalando o componente de hospedagem de cache distribuído:

dotnet add package Aspire.Hosting.Redis --prerelease

Como alternativa, você pode usar o atalho Adicionar > Componente do .NET Aspire no Visual Studio para instalar o componente do gerenciador de pacotes NuGet:

Captura de tela que mostra o gerenciador de pacotes NuGet no Visual Studio exibindo o componente de hospedagem do cache Redis do .NET Aspire.

Depois que o componente de hospedagem é instalado, o código do arquivo Program.cs do host do aplicativo registra o cache e o transmite para os projetos que usam o cache:

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

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

Configurar os projetos de consumo

Para instalar o componente de Cache Distribuído do .NET Aspire Distributed Cache em um microsserviço, use um comando como este nos seus projetos do .NET Aspire:

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

Novamente, você pode optar por usar o gerenciador de pacotes NuGet para instalar o componente:

Captura de tela que mostra o gerenciador de pacotes NuGet no Visual Studio exibindo os componentes do cache Redis do .NET Aspire.

Como usar um cache distribuído

Em qualquer projeto em que você queira usar o cache, é preciso obter um objeto de cache distribuído, que representa a conexão com o Redis. No arquivo Program.cs, este código registra o cache distribuído:

builder.AddRedisDistributedCache("cache")

Depois que o cache for registrado no projeto de consumo, você poderá recuperar o cache distribuído sempre que precisar usando a injeção de dependência:

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) }
        );
      }
   }
}

Configuração

Para que os microsserviços se conectem ao cache distribuído Redis, você precisa informá-los o local em que ele está fornecendo uma cadeia de conexão. A chamada acima ao método AddRedisDistributedCache() especificou uma cadeia de conexão chamada redis.

Use uma seção ConnectionStrings do arquivo de configuração, por exemplo, em appsettings.json, para configurar a cadeia de conexão:

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

Use também appsettings.json para configurar o comportamento do componente de cache distribuído. Por exemplo, este código configura a conexão para que ela atinja o tempo limite após cinco segundos e repita a operação três vezes:

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

Você também pode configurar a conexão usando representantes embutidos no método AddRedisDistributedCache(). Este código configura as mesmas propriedades do exemplo de JSON anterior:

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

Saiba mais