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

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

跳至 GitHub 上的程式碼

複製存放庫 (https://github.com/Azure-Samples/azure-cache-redis-samples/tree/main/quickstart/dotnet 在 GitHub 上。

必要條件

建立快取

  1. 若要建立快取,請登入 Azure 入口網站,然後選取 [建立資源]。

    Create a resource is highlighted in the left navigation pane.

  2. 在 [新增] 頁面上,選取 [資料庫],然後選取 [Azure Cache for Redis]。

    On New, Databases is highlighted, and Azure Cache for Redis is highlighted.

  3. 在 [ 新增 Redis 快 取] 頁面上,設定新快取的設定。

    設定 選擇值 描述
    訂用帳戶 下拉式清單並選取您的訂用帳戶。 用來建立這個新 Azure Cache for Redis 實例的訂用帳戶。
    資源群組 下拉式清單並選取資源群組,或選取 [ 新建 ],然後輸入新的資源組名。 要在其中建立快取和其他資源的資源群組名稱。 藉由將所有應用程式資源放在一個資源群組中,您可以輕鬆地一起管理或刪除它們。
    DNS 名稱 輸入唯一名稱。 快取名稱必須是介於 1 到 63 個字元之間的字串,只包含數位、字母或連字元。 名稱必須以數位或字母開頭和結尾,且不能包含連續連字元。 快取實例的主機名<DNS name.redis.cache.windows.net>
    地點 下拉式清單並選取位置。 選取靠近使用快取之其他服務的區域
    快取類型 下拉式清單並選取階層 階層會決定快取可用的大小、效能和功能。 如需詳細資訊,請參閱 Azure Cache for Redis 概觀
  4. 選取 [ 網络] 索引 標籤,或選取頁面底部的 [ 網络] 按鈕。

  5. 在 [ 網络] 索引標籤中 ,選取您的連線方法。

  6. 選取 [ 下一步:進階 ] 索引標籤,或選取 頁面底部的 [下一步:進階 ] 按鈕,以查看 [ 進階 ] 索引卷標。

    Screenshot showing the Advanced tab in the working pane and the available option to select.

    • 針對 [基本] 或 [標準快取],切換非 TLS 埠的選取範圍。 如果您要啟用 Microsoft Entra Authentication,也可以選取 。
    • 針對 進階版 快取,請設定非 TLS 埠、叢集、受控識別和數據持續性的設定。 如果您要啟用 Microsoft Entra Authentication,也可以選取 。
  7. 選取 [ 下一步:標記 ] 索引標籤,或選取頁面底部的 [ 下一步:標記 ] 按鈕。

  8. 或者,如果您想要分類資源,請在 [ 標記 ] 索引標籤中輸入名稱和值。

  9. 選取 [檢閱 + 建立]。 系統會帶您前往 Azure 驗證設定的 [檢閱 + 建立] 索引標籤。

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

快取需要一段時間才能建立。 您可以在 Azure Cache for Redis 概觀 頁面上監視進度。 當 [狀態] 顯示為 [執行中],快取已準備好使用。

從 Azure 入口網站 擷取主機名、埠和存取密鑰

若要連線 Azure Cache for Redis 伺服器,快取用戶端需要快取的主機名、埠和密鑰。 有些用戶端可能會以稍微不同的名稱來參考這些專案。 您可以從 Azure 入口網站 取得主機名、埠和金鑰

  • 若要取得存取金鑰,請從快取左側導覽中 選取 [存取密鑰]。

    Azure Cache for Redis keys

  • 若要取得主機名和埠,請從快取左側導覽中選取 [ 屬性]。 主機名的格式為 DNS name.redis.cache.windows.net>。<

    Azure Cache for Redis properties

  1. 在您的計算機上建立名為 CacheSecrets.config 的檔案,並將它 放在 C:\AppSecrets\CacheSecrets.config 上。

  2. 編輯 CacheSecrets.config 檔案,並新增下列內容:

    <appSettings>
        <add key="CacheConnection" value="<host-name>,abortConnect=false,ssl=true,allowAdmin=true,password=<access-key>"/>
    </appSettings>
    
  3. 將取代 <host-name> 為您的快取主機名。

  4. 將取代 <access-key> 為快取的主鍵。

  5. 儲存檔案。

設定快取用戶端

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

  1. 在 Visual Studio 中,選取 [工具>NuGet 封裝管理員> 封裝管理員 控制台],然後從 [封裝管理員 控制台] 視窗執行下列命令。

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

連線 至秘密快取

在 Visual Studio 中,開啟 App.config 檔案以確認它包含appSettingsfile參考 CacheSecrets.config 檔案的屬性。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>

    <appSettings file="C:\AppSecrets\CacheSecrets.config"></appSettings>
</configuration>

請勿將認證儲存在原始程式碼中。 為了簡化此範例,我們會使用外部秘密組態檔。 更好的方法是搭配憑證使用 Azure 金鑰保存庫。

使用 Redis 將 連線 至快取 連線

快取的連線是由 RedisConnection 類別所管理。 連接會先在此語句中從 Program.cs進行:

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


Cache 連線 ion appSetting 的值可用來從 Azure 入口網站 參考快取 連接字串 做為密碼參數。

RedisConnection.cs中,您會看到 StackExchange.Redis 具有 關鍵詞的 using 命名空間。 類別需要 RedisConnection 此專案。

using StackExchange.Redis;

程式RedisConnection代碼會藉由從StackExchange.Redis管理 ConnectionMultiplexer 實例,確保快取一律有狀況良好的連線。 類別 RedisConnection 會在連線遺失且無法自動重新連線時重新建立連線。

如需詳細資訊,請參閱 StackExchange.Redis 和 GitHub 存放庫中的程序代碼

執行快取命令

在 中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}");
    }


快取專案可以使用 和 StringGetAsync 方法來儲存和擷StringSetAsync取。

在此範例中,您可以看到 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
    

下列Employee類別是在 Program.cs定義,因此範例也可以示範如何取得和設定串行化物件:

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 物件的串行化。

Console app completed

清除資源

如果您繼續使用此快速入門,您可以保留建立並重複使用這些資源。

否則,如果您已完成快速入門範例應用程式,則可以刪除本快速入門中建立的 Azure 資源,以避免產生費用。

重要

刪除資源群組是無法復原的,而且資源群組及其中的所有資源都會永久刪除。 請確定您不會不小心刪除錯誤的資源群組或資源。 如果您已建立資源,以將這個範例裝載於包含您想要保留之資源的現有資源群組內,您可以個別刪除左側的每個資源,而不是刪除資源群組。

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

在 [ 依名稱篩選... ] 文本框中,輸入資源群組的名稱。 本文的指示使用了名為 TestResources 的資源群組。 在結果清單中的資源群組上,選取 [...],然後刪除資源群組

Delete

系統會要求您確認刪除資源群組。 輸入要確認的資源群組名稱,然後選取 [ 刪除]。

幾分鐘后,資源群組及其所有自主資源都會被刪除。

下一步