教程:使用 .NET.NET Aspire 整合實作快取
雲端原生應用程式經常需要各種可擴充的快取解決方案來提升效能。 .NET Aspire 整合可簡化連線到熱門快取服務的過程,例如 Redis。 在本文中,您將瞭解如何:
- 建立一個基本的 ASP.NET 核心應用程式,並設定為使用 .NET Aspire。
- 新增 .NET Aspire 整合以連線至 Redis 並實作快取。
- 設定 .NET.NET Aspire 整合以符合特定需求。
本文探討如何利用 ASP.NET Core 和 .NET Aspire來使用兩種不同類型的 Redis 快取:
- 輸出快取:可設定的可延伸快取方法,用於儲存未來要求的整個 HTTP 回應。
- 分散式快取:多個應用程式伺服器共用的快取,可讓您快取特定數據片段。 分散式快取通常會維護為存取它的應用程式伺服器的外部服務,並可改善 ASP.NET Core 應用程式的效能和延展性。
先決條件
若要使用 .NET.NET Aspire,您需要在本機安裝下列專案:
- .NET 8.0 或 .NET 9.0
- 符合 OCI 規範的容器運行時間,例如:
- 整合式開發人員環境 (IDE) 或程式碼編輯器,例如:
- Visual Studio 2022 17.9 版或更高版本 (選用)
-
Visual Studio Code (選擇性)
- C# Dev Kit:擴充功能(選擇性)
- JetBrains Rider 搭配 .NET.NET Aspire 外掛程式 (選用)
如需詳細資訊,請參閱 .NET.NET Aspire 設定和工具和 .NET.NET Aspire SDK。
建立專案
- 在 Visual Studio頂端,流覽至 [檔案]>[新增>專案...]。
- 在對話框視窗中,在專案範本搜尋方塊中輸入 .NET Aspire,然後選取 [.NET.NET Aspire 入門應用程式]。 選擇 [下一步]。
- 在 [設定新專案 畫面:
- 輸入 項目名稱AspireRedis。
- 將值的 rest 保留為預設值,然後選取 [下一步]。
- 在 [其他資訊] 頁面:
- 請確保已選取 .NET 9.0。
- 取消選擇 使用 Redis 進行的快取 。 您將設定您自己的快取機制。
- 選取 建立。
Visual Studio 會建立由下列項目組成的新 .NET Aspire 解決方案:
- AspireRedis.Web - 具有預設 Blazor 組態的 .NET Aspire UI 專案。
- AspireRedis.ApiService - 具有預設 .NET.NET Aspire 組態的最小 API,可提供前端的數據。
- AspireRedis.AppHost - 協調器專案,其設計目的是連線及設定應用程式的不同項目和服務。
- AspireRedis.ServiceDefaults - .NET.NET Aspire 共享專案,用來管理解決方案中與 韌性、服務發現和 遙測相關的配置。
設定應用程式主機專案
新增 📦Aspire.Hosting.Redis NuGet 套件至
AspireRedis.AppHost
專案:dotnet add package Aspire.Hosting.Redis
如需詳細資訊,請參閱 dotnet add package 或 在 .NET 應用程式中管理套件相依性。
更新 Program.cs 項目的
AspireRedis.AppHost
檔案,以符合下列程式代碼:var builder = DistributedApplication.CreateBuilder(args); var redis = builder.AddRedis("cache"); var apiservice = builder.AddProject<Projects.AspireRedis_ApiService>("apiservice") .WithReference(redis); builder.AddProject<Projects.AspireRedis_Web>("webfrontend") .WithExternalHttpEndpoints() .WithReference(apiservice) .WithReference(redis); builder.Build().Run();
上述程式代碼會建立本機 Redis 容器實例,並設定UI和API,以自動將實例用於輸出和分散式快取。 程序代碼也會使用服務探索來設定前端UI與後端 API 之間的通訊。 透過 .NET.NET Aspire的隱式服務探索,設定和管理服務連線得到簡化,提升了開發人員的生產力。 在本教學課程的內容中,此功能可簡化連線至 Redis的方式。
傳統上,您會在每個專案的 Redis 檔案中手動指定 appsettings.json 連接字串:
{
"ConnectionStrings": {
"cache": "localhost:6379"
}
}
使用此方法設定連接字串,雖然運作正常,但需要跨多個專案複製連接字元串,這很麻煩且容易出錯。
配置使用輸出快取的UI
將 .NET Aspire Stack Exchange Redis 輸出快取 整合套件新增至您的
AspireRedis.Web
應用程式:dotnet add package Aspire.StackExchange.Redis.OutputCaching
在 Program.cs
AspireRedis.Web
專案的 Blazor 檔案中,緊接在行var builder = WebApplication.CreateBuilder(args);
之後,新增對 AddRedisOutputCache 擴充方法的呼叫:builder.AddRedisOutputCache("cache");
此方法會完成下列工作:
- 設定 ASP.NET Core 輸出快取,以使用具有指定連接名稱的 Redis 實例。
- 自動啟用對應的健康情況檢查、記錄和遙測。
在
AspireRedis.Web
專案中,以以下內容取代 Blazor 檔案的內容:@page "/" @attribute [OutputCache(Duration = 10)] <PageTitle>Home</PageTitle> <h1>Hello, world!</h1> Welcome to your new app on @DateTime.Now
整合包含
[OutputCache]
屬性,可快取整個已渲染的回應。 此頁面還包括一個對@DateTime.Now
的呼叫,以幫助確認回應已被快取。
使用分散式快取設定 API
將 .NET Aspire Stack Exchange Redis 分散式快取 整合套件新增至您的
AspireRedis.ApiService
應用程式:dotnet add package Aspire.StackExchange.Redis.DistributedCaching
在 Program.cs 檔案頂端,新增對 AddRedisDistributedCache的呼叫:
builder.AddRedisDistributedCache("cache");
在 Program.cs 檔案中,新增下列
using
語句:using System.Text; using System.Text.Json; using Microsoft.Extensions.Caching.Distributed;
在 Program.cs 檔案中,將現有的
/weatherforecast
端點程式碼取代為下列專案:app.MapGet("/weatherforecast", async (IDistributedCache cache) => { var cachedForecast = await cache.GetAsync("forecast"); if (cachedForecast is null) { var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast ( DateOnly.FromDateTime(DateTime.Now.AddDays(index)), Random.Shared.Next(-20, 55), summaries[Random.Shared.Next(summaries.Length)] )) .ToArray(); await cache.SetAsync("forecast", Encoding.UTF8.GetBytes(JsonSerializer.Serialize(forecast)), new () { AbsoluteExpiration = DateTime.Now.AddSeconds(10) }); ; return forecast; } return JsonSerializer.Deserialize<IEnumerable<WeatherForecast>>(cachedForecast); }) .WithName("GetWeatherForecast");
在本機測試應用程式
使用下列步驟測試應用程式的快取行為:
- 按下 Visual Studio,使用 執行應用程式。
- 如果出現 [開始 Docker 桌面] 對話框,請選取 [是],然後以啟動服務。
- .NET .NET Aspire 儀表板會在瀏覽器中載入,並列出介面和應用程式介面專案。
測試輸出快取:
- 在 [專案] 頁面上,在 [webfrontend] 列中,點擊 [
localhost
] 欄中的 [] 連結,以開啟應用程式的 UI。 - 應用程式會在首頁上顯示目前的時間。
- 每隔幾秒鐘重新整理瀏覽器,以查看輸出快取所傳回的相同頁面。 快取會在 10 秒後過期,且頁面會重新載入並顯示更新的時間。
測試分散式快取:
- 流覽至 UI 上的 [Blazor] 頁面,以載入隨機化天氣數據的數據表。
- 每隔幾秒鐘刷新瀏覽器,以查看輸出快取所傳回的相同天氣資料。 快取會在 10 秒之後過期,且頁面會重載更新的天氣數據。
祝賀! 您已設定 ASP.NET Core 應用程式,使用 .NET Aspire來進行輸出和分散式快取。