共用方式為


快速入門:搭配 .NET 應用程式使用 Azure Cache for Redis

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

跳至 GitHub 上的程式碼

本文說明如何修改範例應用程式的程式碼,以建立連線至 Azure Cache for Redis 的工作應用程式。

如果您想要直接前往程式碼,請參閱 GitHub 上的 .NET 快速入門範例

必要條件

建立快取

  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 概觀窗格上監視部署進度。 當 [狀態] 顯示 [執行中] 時,表示快取已可供使用。

取得主機名稱、連接埠和存取金鑰

若要連線 Azure Cache for Redis 伺服器,快取用戶端需要快取的主機名稱、連接埠和存取金鑰。 某些用戶端可能會使用略有不同的名稱來參考這些項目。 您可以在 Azure 入口網站中取得主機名稱、連接埠和金鑰。

  • 若要取得快取的存取金鑰:

    1. 在 Azure 入口網站中,移至您的快取。
    2. 在服務功能表上的 [設定] 底下,選取 [驗證]
    3. 在 [驗證] 窗格中,選取 [存取金鑰] 索引標籤。
    4. 若要複製存取金鑰的值,請選取金鑰欄位中的 [複製] 圖示。

    顯示如何尋找及複製 Azure Cache for Redis 執行個體存取金鑰的螢幕擷取畫面。

  • 若要取得快取的主機名稱和連接埠:

    1. 在 Azure 入口網站中,移至您的快取。
    2. 在服務功能表上,選取 [概觀]
    3. 在 [基本資訊] 底下,針對 [主機名稱],選取 [複製] 圖示以複製主機名稱值。 主機名稱值的格式為 <DNS name>.redis.cache.windows.net
    4. 針對 [連接埠],選取 [複製] 圖示以複製連接埠值。

    顯示如何尋找及複製 Azure Cache for Redis 執行個體主機名稱和連接埠的螢幕擷取畫面。

  1. 在您的電腦上建立名為 CacheSecrets.config 的檔案。將其放在 *C:\AppSecrets* 資料夾中。

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

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

    • <access-key> 取代為快取的主要金鑰。

  3. 儲存檔案。

設定快取用戶端

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

  1. 在 Visual Studio 中,選取工具>NuGet 套件管理員>套件管理器主控台。 在 [套件管理員主控台] 視窗中,執行下列命令:

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

連線到秘密快取

在 Visual Studio 中開啟 App.config 檔案,並驗證其包含 appSettings file 屬性 (會參考 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 金鑰保存庫與憑證會更好。

使用 RedisConnection 連線到快取

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

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


CacheConnection 應用程式設定的值可用來從 Azure 入口網站中將快取連接字串參考做為密碼參數。

在 RedisConnection.cs 中,StackExchange.Redis 命名空間會顯示為 RedisConnection 類別所需的 using 陳述式:

using StackExchange.Redis;

RedisConnection 類別程式碼可確保快取一律有狀況良好的連線。 連線由 StackExchange.Redis 中的 ConnectionMultiplexer 執行個體管理。 當連線遺失且無法自動重新連線時,RedisConnection 類別會重新建立連線。

如需詳細資訊,請參閱 StackExchange.RedisStackExchange.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}");
    }


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

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

使用快取中的 .NET 物件

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

Azure Cache for Redis 可以快取 .NET 物件及基本資料類型,但在可以快取 .NET 物件之前,必須先對其進行序列化。

此 .NET 物件序列化是應用程式開發人員的責任。 您在選擇序列化程式時有一些彈性。

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

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

  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;
    }
}

執行範例

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

顯示主控台應用程式已完成的螢幕擷取畫面。

清除資源

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

否則,若要避免與資源相關的費用,如果您完成使用資源,可以刪除您所建立的 Azure 資源群組。

警告

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

刪除資源群組

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

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

    如果有許多資源群組,請在 [篩選任何欄位] 中,輸入您建立以完成本文的資源群組名稱。 在搜尋結果清單中,選取資源群組。

    顯示要從中選擇以刪除之資源群組清單的螢幕擷取畫面。

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

  4. 在 [刪除資源群組] 窗格中,輸入要確認的資源群組名稱,然後選取 [刪除]

    顯示需要輸入資源名稱以確認刪除的方塊螢幕擷取畫面。

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