共用方式為


快速入門:在 .NET Framework 中使用 Azure Cache for Redis

在本快速入門中,您會將 Azure Cache for Redis 納入 .NET Framework 應用程式中,以便存取可從 Azure 內的任何應用程式存取的安全專用快取。 您會在 .NET 主控台應用程式中明確地搭配使用 StackExchange.Redis 用戶端與 C# 程式碼。

跳至 GitHub 上的程式碼

GitHub 上的 Azure-Samples/azure-cache-redis-samples 複製存放庫。

必要條件

建立快取

  1. 若要建立快取,請登入 Azure 入口網站。 在入口網站功能表中,選取 [建立資源]

    顯示 Azure 入口網站左側瀏覽窗格中醒目提示顯示「建立資源」選項的螢幕擷取畫面。

  2. 在 [開始使用] 窗格中,於搜尋列中輸入「Azure Cache for Redis」。 在搜尋結果中,尋找「Azure Cache for Redis」,然後選取 [建立]

    顯示 Azure Marketplace 的螢幕擷取畫面,搜尋方塊中有 Azure Cache for Redis,且「建立」按鈕已醒目顯示。

  3. 在 [新增 Azure Cache for Redis] 窗格的 [基本] 索引標籤上,為您的快取設定下列設定:

    設定 動作 描述
    訂用帳戶 選取 Azure 訂閱。 用於建立新 Azure Cache for Redis 執行個體的訂用帳戶。
    資源群組 選取資源群組,或選取 [新建] 並輸入新的資源群組名稱。 用來建立快取和其他資源的資源群組名稱。 將所有的應用程式資源放在一個資源群組中,您將可輕鬆地一併管理或刪除這些資源。
    DNS 名稱 輸入唯一名稱。 快取名稱必須是 1 到 63 個字元的字串,且只能包含數字、字母和連字號。 名稱的開頭和結尾必須是數字或字母,且不可包含連續的連字號。 快取執行個體的主機名稱\<DNS name>.redis.cache.windows.net
    地點 選取位置。 靠近使用您快取其他服務的 Azure 區域
    快取 SKU 選取 [SKU] 快取的可用大小、效能和功能參數取決於 SKU。 如需詳細資訊,請參閱 Azure Cache for Redis 概觀
    快取大小 選取快取大小。 如需詳細資訊,請參閱 Azure Cache for Redis 概觀
  4. 選取 [網路] 索引標籤,或選取 [下一步: 網路]

  5. 在 [網路] 索引標籤上,選取要用於快取的連線方法。

  6. 選取 [進階] 索引標籤,或選取 [下一步: 進階]

  7. 在 [進階] 窗格中,根據下列資訊驗證或選取驗證方法:

    顯示 [進階] 窗格,以及可供選取可用選項的螢幕擷取畫面。

    • 根據預設,對於新的基本、標準或進階快取,會啟用 Microsoft Entra 驗證並停用存取金鑰驗證
    • 對於基本或標準快取,您可以選擇非 TLS 連接埠的選取項目。
    • 對於標準和進階快取,您可以選擇啟用可用性區域。 您無法在建立快取後停用可用性區域。
    • 針對進階快取,設定適用於非 TLS 連接埠、叢集、受控識別和資料持續性的設定。

    重要

    為了獲得最佳安全性,建議您盡可能使用 Microsoft Entra ID 搭配受控識別來授權對快取的要求。 使用 Microsoft Entra ID 和受控識別進行授權,提供比共用存取金鑰授權更優異的安全性和易用性。 如需搭配快取使用受控識別的詳細資訊,請參閱使用 Microsoft Entra ID 進行快取驗證 (部分機器翻譯)。

  8. (選用) 選取 [標籤] 索引標籤,或選取 [下一步: 標籤]

  9. (選用) 如果您想要分類快取資源,請在 [標籤] 索引標籤上輸入標籤名稱和值。

  10. 選取 [檢閱 + 建立] 按鈕。

    在 [檢閱 + 建立] 索引標籤上,Azure 會自動驗證您的設定。

  11. 出現綠色的 [通過驗證] 訊息之後,請選取 [建立]

新的快取部署會在幾分鐘內進行。 您可以在 Azure Cache for Redis 概觀窗格上監視部署進度。 當 [狀態] 顯示 [執行中] 時,表示快取已可供使用。

在快取上啟用 Microsoft Entra ID 驗證

如果您已有快取,請查看是否已啟用 Microsoft Entra 驗證。 若未啟用,請加以啟用。 建議您針對應用程式使用 Microsoft Entra ID。

  1. 在 Azure 入口網站中,選取 Azure Cache for Redis 執行個體,您想要在其中使用 Microsoft Entra 權杖型驗證。

  2. 從 [資源] 功能表中選取 [驗證]

  3. 簽入工作窗格,以查看是否已核取 [啟用 Microsoft Entra 驗證]。 若是如此,您可以繼續進行。

  4. 選取 [啟用 Microsoft Entra 驗證],然後輸入有效使用者的名稱。 當您選取 [儲存] 時,您輸入的使用者預設會自動獲指派「資料擁有者存取原則」。 您也可以輸入受控識別或服務主體,以連線到快取執行個體。

    此螢幕擷取畫面顯示資源功能表中選取的驗證,並已核取 [啟用 Microsoft Entra 驗證]。

  5. 隨即會顯示快顯對話方塊,詢問您是否要更新設定,並告知您此作業需要幾分鐘的時間。 選取 [是]

    重要

    一旦啟用作業完成,快取執行個體中的節點就會重新啟動以載入新的設定。 建議您在維護視窗期間或在忙碌的上班時間之外執行這項作業。 此作業最多可能需要 30 分鐘的時間。

如需搭配 Azure CLI 使用 Microsoft Entra ID 的詳細資訊,請參閱身分識別的參考頁面

  1. 編輯 App.config 檔案並新增下列內容:

    <appSettings>
    
    <add key="RedisHostName" value="your_redis_cache_hostname"/>
    
```
  1. 以您的 Azure Redis 主機名和埠號碼取代 「your_Azure_Redis_hostname」。 例如: cache-name.eastus.redis.azure.net:10000 適用於 Azure Cache for Redis Enterprise,以及 cache-name.redis.cache.windows.net:6380 適用於 Azure Cache for Redis 服務的 。

  2. 儲存檔案。

設定快取用戶端

在本節中,您會設定主控台應用程式,以使用適用於 .NET 的 StackExchange.Redis 用戶端。

  1. 在 Visual Studio 中,選取 [工具]>[NuGet 套件管理員]>[Package Manager Console],然後從 Package Manager Console 視窗執行下列命令。

    Install-Package Microsoft.Azure.StackExchangeRedis
    
  2. 安裝完成後,StackExchange.Redis 快取用戶端即可與專案搭配使用。

使用 RedisConnection 連線到快取

與快取的連線是由 RedisConnection 類別所管理。 首先從 Program.cs 在此陳述式中建立連線:

     _redisConnection = await RedisConnection.InitializeAsync(redisHostName: ConfigurationManager.AppSettings["RedisHostName"].ToString());

CacheConnection appSetting 的值可用來從 Azure 入口網站中將快取連接字串參考作為密碼參數。

RedisConnection.cs 中,您會看到具有 using 關鍵字的 StackExchange.Redis 命名空間。 這是 RedisConnection 類別的必要項目。

using StackExchange.Redis;

RedisConnection 程式碼管理來自 StackExchange.RedisConnectionMultiplexer 執行個體,以確保對快取的連線一定良好。 當連線中斷且無法自動重新連線時,RedisConnection 類別會重新建立連線。

如需詳細資訊,請參閱 StackExchange.RedisGitHub 存放庫中的程式碼。

執行快取命令

program.cs 中,您可以看到主控台應用程式的 Program 類別中的 RunRedisCommandsAsync 方法有下列程式碼:

private static async Task RunRedisCommandsAsync(string prefix)
    {
        // Simple PING command
        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: PING");
        RedisResult pingResult = await _redisConnection.BasicRetryAsync(async (db) => await db.ExecuteAsync("PING"));
        Console.WriteLine($"{prefix}: Cache response: {pingResult}");

        // Simple get and put of integral data types into the cache
        string key = "Message";
        string value = "Hello! The cache is working from a .NET console app!";

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: GET {key} via StringGetAsync()");
        RedisValue getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync(key));
        Console.WriteLine($"{prefix}: Cache response: {getMessageResult}");

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: SET {key} \"{value}\" via StringSetAsync()");
        bool stringSetResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringSetAsync(key, value));
        Console.WriteLine($"{prefix}: Cache response: {stringSetResult}");

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: GET {key} via StringGetAsync()");
        getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync(key));
        Console.WriteLine($"{prefix}: Cache response: {getMessageResult}");

        // Store serialized object to cache
        Employee e007 = new Employee("007", "Davide Columbo", 100);
        stringSetResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringSetAsync("e007", JsonSerializer.Serialize(e007)));
        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache response from storing serialized Employee object: {stringSetResult}");

        // Retrieve serialized object from cache
        getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync("e007"));
        Employee e007FromCache = JsonSerializer.Deserialize<Employee>(getMessageResult);
        Console.WriteLine($"{prefix}: Deserialized Employee .NET object:{Environment.NewLine}");
        Console.WriteLine($"{prefix}: Employee.Name : {e007FromCache.Name}");
        Console.WriteLine($"{prefix}: Employee.Id   : {e007FromCache.Id}");
        Console.WriteLine($"{prefix}: Employee.Age  : {e007FromCache.Age}{Environment.NewLine}");
    }


您可以使用 StringSetAsyncStringGetAsync 方法來儲存和擷取快取項目。

在此範例中,您可以看到 Message 索引鍵設定為值。 應用程式更新了該快取值。 應用程式也已執行 PING 和命令。

使用快取中的 .NET 物件

Redis 伺服器將大部分資料儲存為字串,但這些字串可能包含許多類型的資料,包括序列化的二進位資料 (在快取中儲存 .NET 物件時可能用到)。

Azure Cache for Redis 可以快取 .NET 物件及基本資料類型,但必須先將 .NET 物件序列化,才能加以快取。

.NET 物件序列化是應用程式開發人員的責任,同時賦與開發人員選擇序列化程式的彈性。

將物件序列化的其中一個簡單方法就是使用 JsonConvert 中的 System.text.Json 序列化方法。

System.text.Json 命名空間新增至 Visual Studio:

  1. 選取 [工具]>[NuGet 套件管理員]>[套件管理員主控台]

  2. 然後,從 [套件管理員主控台] 視窗中執行下列命令。

    Install-Package system.text.json
    

Program.cs 中定義下列 Employee 類別,因此範例也顯示如何取得和設定序列化物件:

class Employee
{
    public string Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }

    public Employee(string employeeId, string name, int age)
    {
        Id = employeeId;
        Name = name;
        Age = age;
    }
}

執行範例

Ctrl+F5 以建置並執行主控台應用程式,來測試 .NET 物件的序列化。

主控台應用程式已完成

清除資源

如果您想要繼續使用在本文中建立的資源,請保留該資源群組。

否則,若已完成資源使用,則可刪除您建立的 Azure 資源群組,以避免衍生費用。

重要

刪除資源群組是無法回復的動作。 當您刪除資源群組時,其中包含的所有資源都將永久刪除。 請確定您不會不小心刪除錯誤的資源群組或資源。 如果您是在包含需保留資源的現有資源群組內部建立資源,則可以個別刪除每個資源,而不必刪除整個資源群組。

刪除資源群組

  1. 登入 Azure 入口網站,然後選取 [資源群組]

  2. 選取您想要刪除的資源群組。

    如果有許多資源群組,請使用 [篩選任何欄位] 方塊,並輸入您針對本文所建立資源群組的名稱。 選取結果清單中的資源群組。

    此螢幕擷取畫面顯示工作窗格中要刪除的資源群組清單。

  3. 選取 [刪除資源群組]

  4. 系統將會要求您確認是否刪除資源群組。 輸入您的資源群組名稱以進行確認,然後選取 [刪除]

    此螢幕擷取畫面顯示需要資源名稱才能確認刪除的表單。

不久後,系統便會刪除該資源群組及其所有的資源。

下一步