Uso di una cache di output Redis

Completato

La costruzione del codice HTML restituito a un client per una richiesta complessa può richiedere tempo e query a più microservizi. Questo codice HTML o altro codice di output è un candidato comune per la memorizzazione nella cache.

Si supponga di lavorare per un rivenditore di attrezzature da esterno. La nuova app Web include un microservizio che costruisce l'interfaccia utente e restituisce HTML ai browser. Ci si vuole assicurare che funzioni in modo ottimale.

In questa unità verranno fornite informazioni sulla memorizzazione nella cache di output e su come implementarla in un microservizio usando Redis e .NET Aspire.

Che cos'è una cache di output?

Usare una cache di output quando si desidera archiviare pagine HTML complete nelle app Web o, in API minime, parti più piccole dell'output. È possibile ottenere miglioramenti ottimali delle prestazioni memorizzando nella cache le pagine richieste di frequente, ad esempio la home page dell'app.

Configurazione della memorizzazione nella cache di output in .NET Aspira

La procedura di installazione e configurazione è la stessa del componente di memorizzazione nella cache distribuita, ad eccezione del fatto che si installa il componente di memorizzazione nella cache di output nei progetti che la utilizzano.

Configurare l'host dell'app

Nell'host dell'app, installare lo stesso componente di hosting Redis usato per la memorizzazione nella cache distribuita:

dotnet add package Aspire.Hosting.Redis --prerelease

Il codice di registrazione è esattamente lo stesso. È necessario aggiungere questo codice solo se non è già stato aggiunto per la memorizzazione nella cache distribuita:

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

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

Configurare i progetti che utilizzano la cache

Nei progetti di microservizio aggiungere il componente di memorizzazione nella cache di output Redis:

dotnet add package Aspire.StackExchange.Redis.OutputCaching

Uso di una cache di output

In genere, il progetto di utilizzo è il microservizio che genera l'interfaccia utente dell'app. Ad esempio, potrebbe trattarsi di un'app Web ASP.NET o Blazor, o di un'API minima. È necessario aggiungere la cache di output all'app e quindi aggiungere middleware al progetto come segue:

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

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

// Add the middleware
app.UseOutputCache();

Memorizzazione nella cache di pagine complete

Per memorizzare nella cache una pagina, usare l'attributo OutputCache, come in questa pagina 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

Memorizzazione nella cache di output in un'API minima

Un'API minima è un progetto che implementa rapidamente un servizio Web HTTP. Riduce il codice necessario per compilare un'API RESTful evitando lo scaffolding e i controller non necessari. Le azioni API e le route vengono invece dichiarate direttamente.

In questo esempio viene restituita una risposta semplice quando l'utente richiede l'ID di un prodotto:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

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

app.Run();

Per memorizzare nella cache questa risposta, chiamare il metodo CacheOutput() o applicare l'attributo OutputCache nella chiamata MapGet:

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

Altre informazioni