快速入門:在 .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 複製存放庫。
必要條件
- Azure 訂用帳戶 - 建立免費帳戶
- Visual Studio 2019
- .NET Framework 4 或更新版本,這是 StackExchange.Redis 用戶端的必要項目。
建立快取
若要建立快取,請登入 Azure 入口網站。 在入口網站功能表中,選取 [建立資源]。
在 [開始使用] 窗格中,於搜尋列中輸入「Azure Cache for Redis」。 在搜尋結果中,尋找「Azure Cache for Redis」,然後選取 [建立]。
在 [新增 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 概觀。 選取 [網路] 索引標籤,或選取 [下一步: 網路]。
在 [網路] 索引標籤上,選取要用於快取的連線方法。
選取 [進階] 索引標籤,或選取 [下一步: 進階]。
在 [進階] 窗格中,根據下列資訊驗證或選取驗證方法:
- 根據預設,對於新的基本、標準或進階快取,會啟用 Microsoft Entra 驗證並停用存取金鑰驗證。
- 對於基本或標準快取,您可以選擇非 TLS 連接埠的選取項目。
- 對於標準和進階快取,您可以選擇啟用可用性區域。 您無法在建立快取後停用可用性區域。
- 針對進階快取,設定適用於非 TLS 連接埠、叢集、受控識別和資料持續性的設定。
重要
為了獲得最佳安全性,建議您盡可能使用 Microsoft Entra ID 搭配受控識別來授權對快取的要求。 使用 Microsoft Entra ID 和受控識別進行授權,提供比共用存取金鑰授權更優異的安全性和易用性。 如需搭配快取使用受控識別的詳細資訊,請參閱使用 Microsoft Entra ID 進行快取驗證 (部分機器翻譯)。
(選用) 選取 [標籤] 索引標籤,或選取 [下一步: 標籤]。
(選用) 如果您想要分類快取資源,請在 [標籤] 索引標籤上輸入標籤名稱和值。
選取 [檢閱 + 建立] 按鈕。
在 [檢閱 + 建立] 索引標籤上,Azure 會自動驗證您的設定。
出現綠色的 [通過驗證] 訊息之後,請選取 [建立]。
新的快取部署會在幾分鐘內進行。 您可以在 Azure Cache for Redis 概觀窗格上監視部署進度。 當 [狀態] 顯示 [執行中] 時,表示快取已可供使用。
在快取上啟用 Microsoft Entra ID 驗證
如果您已有快取,請查看是否已啟用 Microsoft Entra 驗證。 若未啟用,請加以啟用。 建議您針對應用程式使用 Microsoft Entra ID。
在 Azure 入口網站中,選取 Azure Cache for Redis 執行個體,您想要在其中使用 Microsoft Entra 權杖型驗證。
從 [資源] 功能表中選取 [驗證]。
簽入工作窗格,以查看是否已核取 [啟用 Microsoft Entra 驗證]。 若是如此,您可以繼續進行。
選取 [啟用 Microsoft Entra 驗證],然後輸入有效使用者的名稱。 當您選取 [儲存] 時,您輸入的使用者預設會自動獲指派「資料擁有者存取原則」。 您也可以輸入受控識別或服務主體,以連線到快取執行個體。
隨即會顯示快顯對話方塊,詢問您是否要更新設定,並告知您此作業需要幾分鐘的時間。 選取 [是]。
重要
一旦啟用作業完成,快取執行個體中的節點就會重新啟動以載入新的設定。 建議您在維護視窗期間或在忙碌的上班時間之外執行這項作業。 此作業最多可能需要 30 分鐘的時間。
如需搭配 Azure CLI 使用 Microsoft Entra ID 的詳細資訊,請參閱身分識別的參考頁面。
編輯 App.config 檔案並新增下列內容:
<appSettings> <add key="RedisHostName" value="your_redis_cache_hostname"/>
以您的 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 服務的 。儲存檔案。
設定快取用戶端
在本節中,您會設定主控台應用程式,以使用適用於 .NET 的 StackExchange.Redis 用戶端。
在 Visual Studio 中,選取 [工具]>[NuGet 套件管理員]>[Package Manager Console],然後從 Package Manager Console 視窗執行下列命令。
Install-Package Microsoft.Azure.StackExchangeRedis
安裝完成後,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.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}");
}
您可以使用 StringSetAsync
和 StringGetAsync
方法來儲存和擷取快取項目。
在此範例中,您可以看到 Message
索引鍵設定為值。 應用程式更新了該快取值。 應用程式也已執行 PING
和命令。
使用快取中的 .NET 物件
Redis 伺服器將大部分資料儲存為字串,但這些字串可能包含許多類型的資料,包括序列化的二進位資料 (在快取中儲存 .NET 物件時可能用到)。
Azure Cache for Redis 可以快取 .NET 物件及基本資料類型,但必須先將 .NET 物件序列化,才能加以快取。
.NET 物件序列化是應用程式開發人員的責任,同時賦與開發人員選擇序列化程式的彈性。
將物件序列化的其中一個簡單方法就是使用 JsonConvert
中的 System.text.Json
序列化方法。
將 System.text.Json
命名空間新增至 Visual Studio:
選取 [工具]>[NuGet 套件管理員]>[套件管理員主控台]。
然後,從 [套件管理員主控台] 視窗中執行下列命令。
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 資源群組,以避免衍生費用。
重要
刪除資源群組是無法回復的動作。 當您刪除資源群組時,其中包含的所有資源都將永久刪除。 請確定您不會不小心刪除錯誤的資源群組或資源。 如果您是在包含需保留資源的現有資源群組內部建立資源,則可以個別刪除每個資源,而不必刪除整個資源群組。
刪除資源群組
登入 Azure 入口網站,然後選取 [資源群組]。
選取您想要刪除的資源群組。
如果有許多資源群組,請使用 [篩選任何欄位] 方塊,並輸入您針對本文所建立資源群組的名稱。 選取結果清單中的資源群組。
選取 [刪除資源群組]。
系統將會要求您確認是否刪除資源群組。 輸入您的資源群組名稱以進行確認,然後選取 [刪除]。
不久後,系統便會刪除該資源群組及其所有的資源。