前言
雲原生應用程式通常需要各種型別的可擴充套件快取解決方案來提高效能。.NET Aspire 元件簡化了連線到流行的快取服務(例如 Redis)的過程,今天小編就為大家簡單介紹一下如何使用 .NET Aspire 元件實現快取。
本文的內容概要:
- 建立一個設定為使用 .NET Aspire 的基本 ASP.NET Core 應用程式。
- 新增.NET Aspire元件以連線到Redis並實現快取。
- 配置 .NET Aspire 元件以滿足特定要求。
環境準備
要使用 .NET Aspire,需要在本地安裝以下軟體:
- .NET 8.0
- .NET Aspire 工作負載:
- 使用 Visual Studio 安裝程式
- 使用dotnet workload install aspire命令
- Docker 桌面
- 整合開發環境 (IDE) 或程式碼編輯器,例如:
- Visual Studio 2022 預覽版 17.9 或更高版本(可選)
- Visual Studio 程式碼(可選)
有關詳細資訊,請參閱.NET Aspire 設定和工具。
舉例示範
1.新建一個工程檔案
- 在 Visual Studio 頂部,導航到“檔案” “新建” “專案...”。
- 在對話方塊視窗中,在專案模板搜尋框中輸入.NET Aspire ,然後選擇.NET Aspire Starter Application。選擇下一步。
- 在“配置新專案”螢幕上:
- 輸入專案名稱AspireRedis。
- 將其餘值保留為預設值,然後選擇“下一步”。
- 在附加資訊螢幕上:
- 選擇.NET 8.0 。
- 取消選中“使用 Redis 進行快取”
- 最後選擇建立。
Visual Studio 建立了一個新的 .NET Aspire 解決方案,其中包含以下專案:
- AspireRedis.Web 具有預設 .NET Aspire 配置的 Blazor UI 專案。
- AspireRedis.ApiService 具有預設 .NET Aspire 配置的最小 API,可為前端提供資料。
- AspireRedis.AppHost 一個協調器專案,旨在連線和配置應用程式的不同專案和服務。
- AspireRedis.ServiceDefaults 一個 .NET Aspire 共享專案,用於管理解決方案中與彈性、服務發現和遙測相關的專案中重複使用的配置。
2.使用輸出快取配置 UI
- 將.NET Aspire StackExchange Redis 輸出快取元件包新增到您的AspireStorage應用程式中:
dotnet add package Aspire.StackExchange.Redis.OutputCaching --prerelease
(1)在Blazor 專案的Program.csAspireRedis.Web檔案中,緊接著該行之後,新增對AddRedisOutputCachevar builder = WebApplication.CreateBuilder(args);擴充套件方法的呼叫:
builder.AddRedisOutputCache("cache");
(2)在專案的_appsettings.json檔案中AspireRedis.Web,新增對應的連線字串資訊:
"ConnectionStrings": {
"cache": "localhost:6379"
}
(3)將 Blazor 專案的Home.razor檔案的內容替換AspireRedis.Web為以下內容:
@page "/"
@attribute [OutputCache(Duration = 10)]
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app on @DateTime.Now
該元件包含該[OutputCache]屬性,該屬性快取整個呈現的響應。該頁面還包含一個呼叫@DateTime.Now來幫助驗證響應是否已快取。
3.使用分散式快取配置 API
將.NET Aspire StackExchange Redis 分散式快取元件包新增到您的AspireRedis應用程式中:
dotnet add package Aspire.StackExchange.Redis.DistributedCaching --prerelease
(1)在Program.cs檔案的頂部,新增對AddRedisDistributedCache 的呼叫:
builder.AddRedisDistributedCache("cache");
(2)在專案的_appsettings.json檔案中AspireRedis.ApiService,新增對應的連線字串資訊:
"ConnectionStrings": {
"cache": "localhost:6379"
}
(3)在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 AspireRedis.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<AspireRedis.WeatherForecast>>(cachedForecast);
})
.WithName("GetWeatherForecast");
4.配置應用程式宿主專案
更新專案的Program.csAspireRedis.AppHost檔案以匹配以下程式碼:
var builder = DistributedApplication.CreateBuilder(args);
var redis = builder.AddRedisContainer("cache");
var apiservice = builder.AddProject<Projects.AspireRedis_ApiService>("apiservice")
.WithReference(redis);
builder.AddProject<Projects.AspireRedis_Web>("webfrontend")
.WithReference(apiservice)
.WithReference(redis);
builder.Build().Run();
最後:在本地執行並測試應用程式
使用以下步驟測試應用程式的快取行為:
- 透過按鈕來使用 Visual Studio 執行應用程式F5。
- 如果出現“啟動 Docker Desktop”對話方塊,請選擇“是”啟動該服務。
- .NET Aspire Dashboard 在瀏覽器中載入並列出 UI 和 API 專案。
測試輸出快取:
- 在專案頁面的webfrontend行中,單擊Endpointslocalhost列中的連結以開啟應用程式的 UI。
- 該應用程式將在主頁上顯示當前時間。
- 每隔幾秒重新整理一次瀏覽器即可檢視輸出快取返回的同一頁面。10 秒後,快取過期,頁面將根據更新的時間重新載入。
測試分散式快取:
- 導航到Blazor UI 上的“天氣”頁面可以載入隨機天氣資料表。
- 每隔幾秒重新整理一次瀏覽器即可檢視輸出快取返回的相同天氣資料。10 秒後,快取過期,頁面將重新載入更新的天氣資料。
擴充套件連結: