共用方式為


.NET Aspire Redis®* 整合

包括:主機托管整合Client 整合

Redis 是用於快取、向量搜尋和 NoSQL 資料庫的世界最快數據平臺。 .NET Aspire Redis 整合可讓您連線到現有的 Redis 實例,或使用 docker.io/library/redis 容器映射從 .NET 建立新的實例。

Garnet 是來自 Microsoft Research 的高效能快取存放區,符合 Redis 串行化通訊協定 (RESP)。 .NET Aspire Redis 整合可讓您連線到現有的 Garnet 實例,或使用 ghcr.io/microsoft/garnet 容器映射從 .NET 建立新的實例。

Valkey 是一個 Redis 分叉,符合 Redis 串行化通訊協定 (RESP)。 它是高效能索引鍵/值數據存放區,可支援各種工作負載,例如快取、消息佇列,而且可作為主資料庫。 .NET Aspire Redis 整合可讓您連線到現有的 Valkey 實例,或使用 docker.io/valkey/valkey 容器映射從 .NET 建立新的實例。

主機整合

託管整合 Redis 將 Redis 資源模型化為 RedisResource 類型。 若要存取此類型和 API,您可以將它新增到 📦Aspire中的Redis NuGet 套件至 app host 專案。

dotnet add package Aspire.Hosting.Redis

如需詳細資訊,請參閱 dotnet add package管理 .NET 應用程式中的套件相依性

新增 Redis 資源

在應用程式主機專案中,呼叫 builder 實例上的 AddRedis,以新增 Redis 資源:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

當 .NET.NET Aspire 將容器映射新增至應用程式主機時,如上述範例中的 docker.io/Redis/Redis 映射所示,它會在本機計算機上建立新的 Redis 實例。 Redis 資源的參考(cache 變數)已新增至 ExampleProject

WithReference 方法會在名為 "cache"ExampleProject 中設定連接。 如需詳細資訊,請參閱 容器資源生命週期

提示

如果您想要連線到現有的 Redis 實例,請改為呼叫 AddConnectionString。 如需詳細資訊,請參閱 參考現有資源

使用 Redis Insights 新增 Redis 資源

若要將 Redis Insights 新增至 Redis 資源,請呼叫 WithRedisInsight 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache")
                   .WithRedisInsight();

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

Redis Insights 是一種免費的圖形化介面,可在所有作業系統和 Redis 部署中,透過 AI 助理 Redis Copilot 的協助,分析 Redis 數據。 .NET .NET Aspire 將另一個容器映像新增至運行指揮應用程式的應用主機 docker.io/redis/redisinsight

注意

若要設定 RedisInsightResource 主機埠,請對 WithHostPort API 進行呼叫並提供所需的埠號碼。

使用 Redis 指揮官新增 Redis 資源

若要將 Redis 指揮官 新增至 Redis 資源,請呼叫 WithRedisCommander 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache")
                   .WithRedisCommander();

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

Redis 指揮官是一個 Node.js Web 應用程式,可用來檢視、編輯和管理 Redis 資料庫。 .NET .NET Aspire 將另一個容器映像新增至執行指揮官應用程式的主機 docker.io/rediscommander/redis-commander

提示

若要設定 RedisCommanderResource 主機埠,請進行對 WithHostPort API 的呼叫,來提供所需的埠號碼。

使用數據量新增 Redis 資源

若要將數據磁碟區新增至 Redis 資源,請在 Redis 資源上呼叫 WithDataVolume 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache")
                   .WithDataVolume(isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

數據磁碟區可用來將 Redis 數據保存在其容器生命週期之外。 資料量會掛接在 /data 路徑中的 Redis 容器中,而當未提供 name 參數時,名稱將隨機產生。 如需了解有關資料卷的更多資訊,以及它們為何被優先於 系結掛接,請參閱 Docker 文件:卷

新增具有資料綁定掛載的 Redis 資源

若要將數據系結掛接新增至 Redis 資源,請呼叫 WithDataBindMount 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache")
                   .WithDataBindMount(
                       source: @"C:\Redis\Data",
                       isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

重要

相較於功能有限的绑定挂载磁碟區提供更佳的效能、可移植性和安全性,使其更適合生產環境。 不過,綁定掛載允許直接存取和修改主機系統上的檔案,非常適合需要即時變更的開發和測試環境。

數據系結裝載依賴主計算機的檔案系統,在容器重新啟動時保存 Redis 數據。 資料綁定掛載會在 Redis 容器中主機上的 C:\Redis\Data 路徑(或 Unix的 /Redis/Data 路徑)進行掛載。 如需資料系結掛接的詳細資訊,請參閱 Docker 檔:系結掛接

新增具有持續性 Redis 資源

若要將持續性新增至 Redis 資源,請使用數據磁碟區或數據系結掛接呼叫 WithPersistence 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache")
                   .WithDataVolume()
                   .WithPersistence(
                       interval: TimeSpan.FromMinutes(5),
                       keysChangedThreshold: 100);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

上述程式碼透過以指定的間隔和閾值擷取 Redis 數據的快照集,使 Redis 資源具有持續性。 interval 是快照集匯出與 keysChangedThreshold 之間的時間,是觸發快照集所需的密鑰變更作業數目。 如需有關持久性的更多資訊,請參閱 Redis 文件:持久性

Garnet 裝載整合會將 Garnet 資源模型化為 GarnetResource 類型。 若要存取此類型和 API,可讓您將它新增至 📦Aspire。hosting.Garnet應用程式主機 專案中的 NuGet 套件。

dotnet add package Aspire.Hosting.Garnet

如需詳細資訊,請參閱 dotnet add package在 .NET 應用程式中管理套件相依性

新增 Garnet 資源

在應用程式主機專案中,在 builder 實例中呼叫 AddGarnet 來新增 Garnet 資源:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddGarnet("cache");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

當 .NET.NET Aspire 將容器映射新增至應用程式主機時,如上述範例中的 ghcr.io/microsoft/garnet 映像所示,它會在本機計算機上建立新的 Garnet 實例。 Garnet 資源的參考(cache 變數)會新增至 ExampleProject

WithReference 方法會在名為 "cache"ExampleProject 中設定連接。 如需詳細資訊,請參閱 容器資源生命週期

提示

如果您想要連線到現有的 Garnet 實例,請改為呼叫 AddConnectionString。 如需詳細資訊,請參閱 參考現有資源

新增具有資料量的 Garnet 資源

若要將數據量新增至 Garnet 資源,請在 Garnet 資源上呼叫 AddGarnet 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddGarnet("cache")
                   .WithDataVolume(isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

數據磁碟區用來將 Garnet 資料保存在其容器生命週期之外。 數據磁碟區會掛接在 Garnet 容器中的 /data 路徑,且未提供 name 參數時,會隨機產生名稱。 如需數據磁碟區的詳細資訊,以及它們為何優先於 系結掛接的詳細資訊,請參閱 Docker 檔:磁碟區

使用數據系結掛接新增 Garnet 資源

若要將數據系結掛接新增至 Garnet 資源,請呼叫 WithDataBindMount 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddGarnet("cache")
                   .WithDataBindMount(
                       source: @"C:\Garnet\Data",
                       isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

重要

磁碟區相比,數據 系結掛 的功能有限,而 磁碟區可提供更佳的效能、可移植性和安全性,使其更適合生產環境。 不過,綁定掛載允許直接存取和修改主機系統上的檔案,非常適合開發和測試需要即時變更的情況。

數據系結掛接依賴主計算機的文件系統,在容器重新啟動時保存 Garnet 數據。 數據系結掛接會掛接在 Windows 上的 C:\Garnet\Data (或 Unix上的 /Garnet/Data ) 路徑上,位於 Garnet 容器中的主電腦上。 如需資料系結掛接的詳細資訊,請參閱 Docker 檔:系結掛接

新增具有持續性的 Garnet 資源

若要將持續性新增至 Garnet 資源,可透過資料卷或資料綁定掛載呼叫 WithPersistence 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddGarnet("cache")
                   .WithDataVolume()
                   .WithPersistence(
                       interval: TimeSpan.FromMinutes(5),
                       keysChangedThreshold: 100);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

前述程式碼透過以指定的間隔和閾值擷取 Garnet 數據的快照,將新增持久性至 Redis 資源。 interval 是快照集匯出與 keysChangedThreshold 之間的時間,是觸發快照集所需的密鑰變更作業數目。 如需關於持久性的更多資訊,請參閱 Redis 文件:持久性

Valkey 主機整合將 Valkey 資源建模為 ValkeyResource 類別。 若要存取此類型和 API,可讓您將它新增至 📦Aspire。Hosting.Valkey應用程式主機 專案中的 NuGet 套件。

dotnet add package Aspire.Hosting.Valkey

如需詳細資訊,請參閱 dotnet add package管理 .NET 應用程式中的套件相依性

新增 Valkey 資源

在應用程式主機專案中,呼叫 builder 實例上的 AddValkey 以新增 Valkey 資源:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddValkey("cache");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

當 .NET.NET Aspire 將容器影像新增至應用程式主機時,如上述範例中所示的 docker.io/valkey/valkey 影像,它會在本機計算機上建立新的 Valkey 實例。 將對您的 Valkey 資源的參照 (cache 變數) 新增至 ExampleProject

WithReference 方法會在名為 "cache"ExampleProject 中設定連接。 如需詳細資訊,請參閱 容器資源生命週期

小技巧

如果您想要連線到現有的 Valkey 實例,請改為呼叫 AddConnectionString。 如需詳細資訊,請參閱 參考現有資源

添加具資訊量的 Valkey 資源

若要將數據磁碟區新增至 Valkey 資源,請在 Valkey 資源上呼叫 AddValkey 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddValkey("cache")
                   .WithDataVolume(isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

數據磁碟區用來將 Valkey 數據保存在其容器生命週期之外。 資料量會掛載在 Valkey 容器中的 /data 路徑,當未提供 name 參數時,名稱會隨機生成。 如需有關數據磁碟區的更多信息,以及為何偏好它們而不是 系結掛接,請參閱 Docker 文件:磁碟區

新增 Valkey 資源並使用資料綁定掛載

若要將數據系結掛接新增至 Valkey 資源,請呼叫 WithDataBindMount 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddValkey("cache")
                   .WithDataBindMount(
                       source: @"C:\Valkey\Data",
                       isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

重要

相較於 磁碟區,數據 系結掛 接的功能有限,可提供更佳的效能、可移植性和安全性,使其更適合生產環境。 不過,綁定掛載允許直接存取和修改主機系統上的檔案,非常適合用於開發和測試需要即時變更的情境。

數據系結掛接依賴主計算機的文件系統,在容器重新啟動時保存 Valkey 數據。 數據綁定掛載會掛載在 Windows 上的 C:\Valkey\Data(或 Unix上的 /Valkey/Data)路徑上,位於 Valkey 容器中的主機上。 如需資料系結掛接的詳細資訊,請參閱 Docker 檔:系結掛接

新增具有持續性的 Valkey 資源

若要將持續性新增至 Valkey 資源,請使用資料磁碟區或資料綁定掛載來呼叫 WithPersistence 方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddValkey("cache")
                   .WithDataVolume()
                   .WithPersistence(
                       interval: TimeSpan.FromMinutes(5),
                       keysChangedThreshold: 100);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

上述程式代碼會透過在指定的間隔和閾值拍攝 Valkey 數據的快照,增加 Redis 資源的持久性。 interval 是快照集匯出與 keysChangedThreshold 之間的時間,是觸發快照集所需的密鑰變更作業數目。 如需持久性的詳細資訊,請參閱 Redis 檔:持久性

裝載整合健康情況檢查

Redis 裝載整合會自動為適當的資源類型新增健康檢查。 健康檢查會確認 server 正在執行,並且可以建立與其連線。

主機整合功能依賴 📦 AspNetCore.HealthChecks。Redis NuGet 套件。

Client 整合

若要開始使用 .NET Aspire Stack Exchange Redisclient 整合,請安裝 📦Aspire。StackExchange。client-consuming 專案中Redis NuGet 套件,也就是使用 Redisclient的應用程式專案。 Redis client 整合會註冊一個 IConnectionMultiplexer 實例,您可以用來與 Redis互動。

dotnet add package Aspire.StackExchange.Redis

新增 Redisclient

在 client取用專案的 Program.cs 檔案中,在任何 IHostApplicationBuilder 上呼叫 AddRedisClient 擴充方法,以註冊 IConnectionMultiplexer,以透過相依性插入容器使用。 方法會採用連接名稱參數。

builder.AddRedisClient(connectionName: "cache");

提示

connectionName 參數必須符合在應用程式主專案中新增 Redis 資源時所使用的名稱。 如需詳細資訊,請參閱 新增 Redis 資源

提示

connectionName 參數必須符合在應用程式主機專案中新增 Garnet 資源時所使用的名稱。 如需詳細資訊,請參閱 新增 Garnet 資源

提示

connectionName 參數必須符合在應用程式主機專案中新增 Valkey 資源時所使用的名稱。 如需詳細資訊,請參閱 新增 Valkey 資源

接著,您可以使用相依注入來擷取 IConnection 實例。 例如,若要從範例服務擷取連線:

public class ExampleService(IConnectionMultiplexer connectionMux)
{
    // Use connection multiplexer...
}

如需相依性插入的詳細資訊,請參閱 .NET 相依性插入

新增索引鍵 Redisclient

在某些情況下,您可能想要以不同的連線名稱註冊多個 IConnectionMultiplexer 實例。 若要註冊具 Redis 鍵入的用戶端,請呼叫 AddKeyedRedisClient 方法:

builder.AddKeyedRedisClient(name: "chat");
builder.AddKeyedRedisClient(name: "queue");

然後,您可以使用相依注入來擷取 IConnectionMultiplexer 實例。 例如,若要從範例服務擷取連線:

public class ExampleService(
    [FromKeyedServices("chat")] IConnectionMultiplexer chatConnectionMux,
    [FromKeyedServices("queue")] IConnectionMultiplexer queueConnectionMux)
{
    // Use connections...
}

如需索引鍵服務的詳細資訊,請參閱 .NET 相依性插入:索引鍵服務

配置

.NET Aspire Stack Exchange Redisclient 整合提供多個選項,可根據專案的需求和慣例來設定 Redis 連線。

使用連接字串

從 [ConnectionStrings 組態] 區段使用連接字串時,您可以在呼叫 AddRedis時提供連接字串的名稱:

builder.AddRedis("cache");

從 [ConnectionStrings 組態] 區段使用連接字串時,您可以在呼叫 AddGarnet時提供連接字串的名稱:

builder.AddGarnet("cache");

從 [ConnectionStrings 組態] 區段使用連接字串時,您可以在呼叫 AddValkey時提供連接字串的名稱:

builder.AddValkey("cache");

然後,連接字串將會從 [ConnectionStrings 組態] 區段擷取:

{
  "ConnectionStrings": {
    "cache": "localhost:6379"
  }
}

如需如何格式化此連接字串的詳細資訊,請參閱 Stack Exchange Redis 組態檔

使用組態提供者

.NET Aspire Stack Exchange Redis 整合支援 Microsoft.Extensions.Configuration。 它使用 Aspire:StackExchange:Redis 鍵從配置載入 StackExchangeRedisSettings。 設定選項的範例 appsettings.json

{
  "Aspire": {
    "StackExchange": {
      "Redis": {
        "ConnectionString": "localhost:6379",
        "DisableHealthChecks": true,
        "DisableTracing": false
      }
    }
  }
}

如需完整的 Redisclient 整合 JSON 架構,請參閱 Aspire。StackExchange。Redis/ConfigurationSchema。json

使用內聯委派

您也可以傳遞 Action<StackExchangeRedisSettings> 委派來設定部分或所有內嵌選項,例如設定 DisableTracing

builder.AddRedisClient(
    "cache",
    static settings => settings.DisableTracing = true);

Client 整合健康檢查

根據預設,.NET.NET Aspire 整合會為所有服務啟用 健康檢查。 如需詳細資訊,請參閱 .NET.NET Aspire 整合概觀

.NET Aspire Stack Exchange Redis 整合會處理下列事項:

  • StackExchangeRedisSettings.DisableHealthChecksfalse時,新增健康檢查,以嘗試連線至容器實例。
  • /health HTTP 端點整合,規定所有已註冊的健康檢查必須通過,才能視應用程式為準備接受流量。

可檢視性和遙測

.NET .NET Aspire 整合會自動設定記錄、追蹤和計量組態,有時被稱為 可觀察性的支柱。 如需整合可觀察性和遙測的詳細資訊,請參閱 .NET.NET Aspire 整合概觀。 視支援服務而定,某些整合可能只支援其中一些功能。 例如,某些整合支援記錄和追蹤,但不支援計量。 您也可以使用 組態 一節中呈現的技術來停用遙測功能。

伐木

.NET Aspire Stack Exchange Redis 整合會使用下列記錄類別:

  • Aspire.StackExchange.Redis

追踪

.NET Aspire Stack Exchange Redis 整合會使用 OpenTelemetry發出下列追蹤活動:

  • OpenTelemetry.Instrumentation.StackExchangeRedis

指標

.NET Aspire Stack Exchange Redis 整合功能目前預設不支援指標,因為 StackExchange.Redis 函式庫的限制。

Azure Redis 主機托管整合

若要將 Redis 資源部署至 Azure,請安裝 📦Aspire主機託管AzureRedis NuGet 套件:

dotnet add package Aspire.Hosting.Azure.Redis

新增 Azure Cache for Redisserver 資源

安裝 .NET Aspire 主機 AzureRedis 套件之後,請在應用程式主機專案中呼叫 AddAzureRedis 擴充方法:

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddAzureRedis("azcache")

var exampleProject = builder.AddProject<Projects.ExampleProject>()
                            .WithReference(cache);

上述 AddAzureRedis 呼叫會將 Redisserver 資源設定為 Azure Cache for Redis

重要

根據預設,AddAzureRedis 會設定 Microsoft Entra ID 驗證。 這需要修改那些必須連線到這些資源的應用程式,比如說 client 整合。

新增 Azure Cache for Redisclient

預設情況下,當您在 Redis 裝載整合中呼叫 AddAzureRedis 時,它會設定 📦 MicrosoftAzureStackExchangeRedis NuGet 套件來啟用驗證。

dotnet add package Microsoft.Azure.StackExchangeRedis

您可以使用 client 整合和 Microsoft.Azure.StackExchangeRedis來取用 Redis 連線。 請考慮下列組態程式代碼:

var azureOptionsProvider = new AzureOptionsProvider();

var configurationOptions = ConfigurationOptions.Parse(
    builder.Configuration.GetConnectionString("cache") ?? 
    throw new InvalidOperationException("Could not find a 'cache' connection string."));

if (configurationOptions.EndPoints.Any(azureOptionsProvider.IsMatch))
{
    await configurationOptions.ConfigureForAzureWithTokenCredentialAsync(
        new DefaultAzureCredential());
}

builder.AddRedisClient("cache", configureOptions: options =>
{
    options.Defaults = configurationOptions.Defaults;
});

如需詳細資訊,請參閱 Microsoft。Azure。StackExchangeRedis 存放庫。

另請參閱

*Redis 是 Redis 有限公司的註冊商標。任何權利都保留給 Redis 有限公司。Microsoft 的任何用途僅作為參考之用,且不會表明 Redis 與 Microsoft 之間的任何贊助、認可或關聯。返回頂端