Verwenden eines Redis-Ausgabecache

Abgeschlossen

Die Erstellung des HTML-Codes, der für eine komplexe Anforderung an einen Client zurückgegeben wird, kann einige Zeit in Anspruch nehmen und Abfragen an mehrere Microservices erfordern. Dieser HTML- oder anderer Ausgabecode ist ein gängiger Kandidat für die Zwischenspeicherung.

Stellen Sie sich vor, Sie arbeiten für einen Outdoor-Händler. Ihre neue Web-App enthält einen Microservice, der die Benutzeroberfläche erstellt und HTML an Browser zurückgibt. Sie möchten sicherstellen, dass sie optimal funktioniert.

In dieser Lektion erfahren Sie mehr über die Zwischenspeicherung von Ausgaben und deren Implementierung in einem Microservice mithilfe von Redis und .NET Aspire.

Was ist ein Ausgabecache?

Verwenden Sie einen Ausgabecache, wenn Sie komplette HTML-Seiten in Web-Apps oder – in minimalen APIs – kleinere Teile der Ausgabe speichern möchten. Sie erhalten optimale Leistungsverbesserungen, wenn Sie häufig angeforderte Seiten zwischenspeichern, z. B. die Startseite Ihrer App.

Einrichten der Zwischenspeicherung von Ausgaben in .NET Aspire

Die Installations- und Konfigurationsschritte unterscheiden sich von denen für die Komponente für die verteilte Zwischenspeicherung nur dadurch, dass Sie die Komponente für die Ausgabezwischenspeicherungs in den zugreifenden Projekten installieren.

Konfigurieren des App-Hosts

Installieren Sie im App-Host die gleiche Redis-Hostingkomponente, die für die verteilte Zwischenspeicherung verwendet wird:

dotnet add package Aspire.Hosting.Redis --prerelease

Der Registrierungscode ist identisch. Sie müssen diesen Code nur dann hinzufügen, wenn Sie ihn noch nicht für die verteilte Zwischenspeicherung hinzugefügt haben:

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

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

Konfigurieren der zugreifenden Projekte

Fügen Sie in den Microservice-Projekten die Redis-Komponente für die Ausgabezwischenspeicherungs hinzu:

dotnet add package Aspire.StackExchange.Redis.OutputCaching

Verwenden eines Ausgabecaches

In der Regel ist das zugreifende Projekt der Microservice, der die Benutzeroberfläche Ihrer App generiert. Beispielsweise kann es sich um eine ASP.NET- oder Blazor-Web-App oder eine minimale API handeln. Sie müssen der App den Ausgabecache hinzufügen und dem Projekt dann wie folgt Middleware hinzufügen:

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

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

// Add the middleware
app.UseOutputCache();

Zwischenspeichern vollständiger Seiten

Zum Zwischenspeichern einer Seite verwenden Sie das Attribut OutputCache, wie auf dieser Razor-Seite:

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

<PageTitle>Welcome to Contoso</PageTitle>

<h1>Welcome to Contoso</h1>

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

Zwischenspeichern der Ausgabe in einer minimalen API

Eine minimale API ist ein Projekt, das einen HTTP-Webdienst schnell implementiert. Der Code, der zum Aufbau einer RESTful-API erforderlich ist, wird durch die Vermeidung von Gerüstbau und unnötigen Controllern verschlankt. Stattdessen werden API-Aktionen und Routen direkt deklariert.

In diesem Beispiel wird eine einfache Antwort zurückgegeben, wenn der Benutzer oder die Benutzerin die ID eines Produkts anfordert:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

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

app.Run();

Zum Zwischenspeichern dieser Antwort rufen Sie entweder die CacheOutput()-Methode auf oder wenden das OutputCache-Attribut im MapGet-Aufruf an:

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

Weitere Informationen