使用 Redis 輸出快取

已完成

針對複雜要求傳回給用戶端的 HTML 建構可能需要一段時間,而且需要對多個微服務進行查詢。 此 HTML 或其他輸出程式代碼是快取的常見候選專案。

假設您任職於戶外設備零售商。 新的 Web 應用程式包含可建構使用者介面並將 HTML 傳回瀏覽器的微服務。 您想要確保它會以最佳方式執行。

在本單元中,您將了解輸出快取,以及如何使用 Redis 和 .NET Aspire 在微服務中實作。

什麼是輸出快取?

當您想要將完整的 HTML 頁面儲存在 Web 應用程式中,或以最小的 API 或較小的輸出部分儲存時,請使用輸出快取。 您可以藉由快取經常要求的頁面,例如應用程式的首頁,取得最佳效能改善。

在 .NET Aspire 中設定輸出快取

安裝和設定步驟與分散式快取元件相同,不同之處在於您在取用專案中安裝輸出快取元件。

設定應用程式主機

在應用程式主機中,安裝與您用於分散式快取相同的 Redis 裝載元件:

dotnet add package Aspire.Hosting.Redis --prerelease

註冊碼完全相同。 如果您尚未針對分散式快取新增此程式代碼,您只需要新增此程式代碼:

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

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

設定取用專案

在微服務專案中,新增 Redis 輸出快取元件:

dotnet add package Aspire.StackExchange.Redis.OutputCaching

使用輸出快取

取用專案通常是產生您應用程式使用者介面的微服務。 例如,它可能是 ASP.NET 或 Blazor Web 應用程式或最小 API。 您必須將輸出快取新增至應用程式,然後將中間件新增至專案,如下所示:

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

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

// Add the middleware
app.UseOutputCache();

快取完整頁面

若要快取頁面,您可以使用 OutputCache 屬性,例如在此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

在最小 API 中快取輸出

最低 API 是可快速實作 HTTP Web 服務的專案。 它可藉由避免 Scaffold 和不必要的控制器,來精簡建置 RESTful API 所需的程式碼。 相反地,API 動作和路由會直接宣告。

在此範例中,當使用者要求產品標識碼時,會傳回簡單的回應:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

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

app.Run();

若要快取此回應,請呼叫 CacheOutput() 方法,或在呼叫中MapGet套用 OutputCache 屬性:

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

深入了解