使用 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}.");