Usando um cache de saída Redis

Concluído

A construção do HTML retornado a um cliente para uma solicitação complexa pode levar tempo e exigir consultas a vários microsserviços. Este HTML ou outro código de saída é um candidato comum para cache.

Imagine que trabalha para um retalhista de equipamento exterior. Seu novo aplicativo Web inclui um microsserviço que constrói a interface do usuário e retorna HTML para navegadores. Você quer garantir que ele tenha um desempenho ideal.

Nesta unidade, você aprenderá sobre o cache de saída e como implementá-lo em um microsserviço usando o Redis e o .NET Aspire.

O que é um cache de saída?

Use um cache de saída quando quiser armazenar páginas HTML completas em aplicativos Web ou, em APIs mínimas, partes menores de saída. Você obtém melhorias de desempenho ideais armazenando em cache páginas que são solicitadas com frequência, como a página inicial do seu aplicativo.

Configurando o cache de saída no .NET Aspire

As etapas de instalação e configuração são as mesmas do componente de cache distribuído, exceto que você instala o componente de cache de saída nos projetos em consumo.

Configurar o host do aplicativo

No host do aplicativo, instale o mesmo componente de hospedagem Redis que você usou para cache distribuído:

dotnet add package Aspire.Hosting.Redis --prerelease

O código de registo é exatamente o mesmo. Você só precisará adicionar esse código se ainda não o tiver adicionado para cache distribuído:

// 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

Nos projetos de microsserviço, adicione o componente de cache de saída Redis:

dotnet add package Aspire.StackExchange.Redis.OutputCaching

Usando um cache de saída

Normalmente, o projeto que consome é o microsserviço que gera a interface do usuário do seu aplicativo. Por exemplo, pode ser um aplicativo Web ASP.NET ou Blazor ou uma API mínima. Você deve adicionar o cache de saída ao aplicativo e, em seguida, adicionar middleware ao projeto da seguinte forma:

// Add the output cache
builder.AddRedisOutputCache();

// Build the app
var app = builder.Build();

// Add the middleware
app.UseOutputCache();

Armazenamento em cache de páginas completas

Para armazenar uma página em cache, use o OutputCache atributo, como nesta página do Razor:

@page "/"
@attribute [OutputCache(Duration = 10)]

<PageTitle>Welcome to Contoso</PageTitle>

<h1>Welcome to Contoso</h1>

This is our homepage. The time is: @DateTime.Now

Armazenamento em cache de saída em uma API mínima

Uma API mínima é um projeto que implementa um serviço Web HTTP rapidamente. Ele reduz o código necessário para construir uma API RESTful, evitando andaimes e controladores desnecessários. Em vez disso, as ações e rotas da API são declaradas diretamente.

Neste exemplo, uma resposta simples é retornada quando o usuário solicita a ID de um produto:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/products/{ProdId}", 
    (int ProdId) => $"The product ID is {ProdId}.");

app.Run();

Para armazenar essa resposta em cache, chame o CacheOutput() método ou aplique o OutputCache atributo na MapGet chamada:

app.MapGet("/products/{ProdId}", (int ProdId) => $"The product ID is {ProdId}.").CacheOutput();
app.MapGet("/products/{ProdId}", [OutputCache] (int ProdId) => $"The product ID is {ProdId}.");

Mais informações