Använda en Redis-utdatacache

Slutförd

Konstruktionen av HTML-koden som returneras till en klient för en komplex begäran kan ta tid och kräva frågor till flera mikrotjänster. Den här HTML-koden eller annan utdatakod är en vanlig kandidat för cachelagring.

Anta att du arbetar för en återförsäljare av utomhusutrustning. Den nya webbappen innehåller en mikrotjänst som konstruerar användargränssnittet och returnerar HTML till webbläsare. Du vill se till att den fungerar optimalt.

I den här lektionen får du lära dig mer om cachelagring av utdata och hur du implementerar den i en mikrotjänst med hjälp av Redis och .NET Aspire.

Vad är en utdatacache?

Använd en utdatacachen när du vill lagra fullständiga HTML-sidor i webbappar eller, i minimala API:er, mindre delar av utdata. Du får optimala prestandaförbättringar genom att cachelagra sidor som begärs ofta, till exempel appens startsida.

Konfigurera cachelagring av utdata i .NET Aspire

Installations- och konfigurationsstegen är desamma som för komponenten för distribuerad cachelagring, förutom att du installerar cachelagringskomponenten för utdata i de förbrukande projekten.

Konfigurera appvärden

Installera samma Redis-värdkomponent som du använde för distribuerad cachelagring på appvärden:

dotnet add package Aspire.Hosting.Redis --prerelease

Registreringskoden är exakt densamma. Du behöver bara lägga till den här koden om du inte redan har lagt till den för distribuerad cachelagring:

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

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

Konfigurera de förbrukande projekten

I mikrotjänstprojekten lägger du till redis-cachelagringskomponenten för utdata:

dotnet add package Aspire.StackExchange.Redis.OutputCaching

Använda en utdatacachen

Det förbrukande projektet är vanligtvis den mikrotjänst som genererar appens användargränssnitt. Det kan till exempel vara en ASP.NET- eller Blazor-webbapp eller ett minimalt API. Du måste lägga till utdatacachen i appen och sedan lägga till mellanprogram i projektet så här:

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

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

// Add the middleware
app.UseOutputCache();

Cachelagring fullständiga sidor

Om du vill cachelagras en sida använder du attributet OutputCache , till exempel på den här Razor-sidan:

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

<PageTitle>Welcome to Contoso</PageTitle>

<h1>Welcome to Contoso</h1>

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

Cachelagring utdata i ett minimalt API

Ett minimalt API är ett projekt som snabbt implementerar en HTTP-webbtjänst. Det bantar bort den kod som krävs för att skapa ett RESTful-API genom att undvika byggnadsställningar och onödiga kontrollanter. I stället deklareras API-åtgärder och vägar direkt.

I det här exemplet returneras ett enkelt svar när användaren begär en produkts ID:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

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

app.Run();

Om du vill cachelagras det här svaret anropar CacheOutput() du antingen metoden eller tillämpar OutputCache attributet i anropet 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}.");

Läs mer