Usando um cache distribuído Redis

Concluído

Em um aplicativo nativo da nuvem, equipes separadas criam microsserviços com suas tecnologias preferidas em suas próprias agendas. Os microsserviços geralmente operam de forma completamente independente. Eles podem se beneficiar do cache, mas, se executarem caches separados, talvez não consigam realizar a melhoria de desempenho ideal. Se você fornecer um único cache para vários microsserviços, esses serviços poderão recuperar informações do cache que foi armazenado por outro microsserviço.

Imagine que trabalha para um retalhista de equipamento exterior. Você decidiu implementar o cache usando um servidor Redis em seu microsserviço de 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 de vários microsserviços em seu aplicativo. Você também verá como o .NET Aspire facilita a implementação de um cache distribuído.

O que é cache distribuído?

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

Configurando o cache distribuído no .NET Aspire

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

Configurar o host do aplicativo

No projeto de host de aplicativo da sua 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 .NET Aspire no Visual Studio para instalar o componente do gerenciador de pacotes NuGet:

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

Depois que o componente de hospedagem é instalado, o código no arquivo Program.cs do host do aplicativo registra o cache e o passa para 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 que consomem

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

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

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

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

Usando um cache distribuído

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

builder.AddRedisDistributedCache("cache")

Depois que o cache é registrado no projeto de consumo, você pode 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 do Redis, você deve informar onde ele está fornecendo uma cadeia de conexão. A chamada acima para o AddRedisDistributedCache() método especificou uma cadeia de conexão chamada redis.

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

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

Você também pode usar appsettings.json para configurar o comportamento do componente de cache distribuído. Por exemplo, esse código configura a conexão para atingir o tempo limite após cinco segundos e tentar novamente três vezes:

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

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

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

Mais informações