クイックスタート: .NET Framework で Azure Cache for Redis を使用する
このクイック スタートでは、Azure 内の任意のアプリケーションからアクセスできるセキュリティで保護された専用キャッシュにアクセスするために、Azure Cache for Redis を .NET Framework アプリに組み込みます。 具体的には、.NET コンソール アプリで StackExchange.Redis クライアントと C# コードを使用します。
GitHub のコードにスキップする
GitHub の Azure-Samples/azure-cache-redis-samples からリポジトリをクローンします。
前提条件
- Azure サブスクリプション - 無料アカウントを作成する
- Visual Studio 2019
- .NET Framework 4 以降。これは StackExchange.Redis クライアントで必要です。
キャッシュの作成
キャッシュを作成するには、Azure portal にサインインします。 ポータルのメニューで、[リソースの作成] を選びます。
[作業の開始] ペインの検索バーに「Azure Cache for Redis」と入力します。 検索結果で Azure Cache for Redis を見つけて、[作成] を選びます。
[新しい Redis Cache] ペインの [基本] タブで、以下のキャッシュの設定を構成します。
設定 アクション 説明 サブスクリプション Azure サブスクリプションを選択します。 Azure Cache for Redis の新しいインスタンスの作成に使うサブスクリプション。 リソース グループ リソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの名前を入力します。 キャッシュや他のリソースを作成するリソース グループの名前。 すべてのアプリ リソースを 1 つのリソース グループに配置することで、それらをまとめて簡単に管理または削除できます。 DNS 名 一意の名前を入力します。 キャッシュ名は、数字、英字、ハイフンのみを含む 1 から 63 文字の文字列とする必要があります。 名前の先頭と末尾には数字または文字を使用する必要があり、連続するハイフンを含めることはできません。 キャッシュ インスタンスの "ホスト名" は \<DNS name>.redis.cache.windows.net
です。場所 場所を選択します。 キャッシュを使う他のサービスに近い Azure リージョン。 キャッシュ SKU SKU を選びます。 SKU によって、キャッシュに利用できるサイズ、パフォーマンス、機能のパラメーターが決まります。 詳細については、Azure Cache for Redis の概要に関するページを参照してください。 キャッシュ サイズ キャッシュ サイズを選びます。 詳細については、Azure Cache for Redis の概要に関するページを参照してください。 [ネットワーク] タブを選ぶか、[次へ: ネットワーク] を選びます。
[ネットワーク] タブで、キャッシュに使う接続方法を選びます。
[詳細] タブを選ぶか、[次へ: 詳細] を選びます。
[詳細] ペインで、以下の情報に基づいて認証方法を確認または選択します。
- 既定では、新しい Basic、Standard、または Premium キャッシュでは、Microsoft Entra 認証が有効になり、アクセス キー認証が無効になります。
- Basic または Standard キャッシュの場合は、非 TLS ポートを選択できます。
- Standard および Premium キャッシュの場合は、可用性ゾーンを有効にすることを選択できます。 キャッシュの作成後に可用性ゾーンを無効にすることはできません。
- Premium キャッシュを利用する場合は、非 TLS ポート、クラスタリング、マネージド ID、データ永続化の設定を構成します。
重要
最適なセキュリティのため、可能であれば、キャッシュに対する要求を認可するのに Microsoft Entra ID とマネージド ID を使うことをお勧めします。 Microsoft Entra ID とマネージド ID を使う認可は、共有アクセス キーの認可より、セキュリティと使いやすさの点で優れています。 キャッシュでのマネージド ID の使用について詳しくは、キャッシュ認証への Microsoft Entra ID の使用に関する記事をご覧ください。
(省略可能) [タグ] タブを選ぶか、[次へ: タグ] を選びます。
(省略可能) キャッシュ リソースを分類する場合は、[タグ] タブでタグの名前と値を入力します。
[確認および作成] ボタンを選択します。
[確認と作成] タブでは、Azure によって構成が自動的に検証されます。
緑色の検証に成功のメッセージが表示された後、 [作成] を選択します。
新しいキャッシュのデプロイは数分で完了します。 デプロイの進行状況は、Azure Cache for Redis の [概要] ペインで監視できます。 [状態] に [実行中] と表示されたら、キャッシュを使用できます。
キャッシュで Microsoft Entra ID の認証を有効にする
キャッシュがある場合は、Microsoft Entra 認証が有効になっているかどうかを確認します。 そうでない場合は、有効にします。 アプリには Microsoft Entra ID を使用することをお勧めします。
Azure portal で、Microsoft Entra トークンベースの認証を使用する対象の Azure Cache for Redis インスタンスを選択します。
リソース メニューで [認証] を選択します。
作業ペインで、[Microsoft Entra 認証を有効にする] がオンになっているかどうかを確認します。 その場合は、次に進みます。
[Enable Microsoft Entra 認証] を選択し、有効なユーザー名を入力します。 [保存] を選択した場合は、既定で入力したユーザーに [データ所有者アクセス ポリシー] が自動的に割り当てられます。 マネージド ID またはサービス プリンシパルを入力して、キャッシュ インスタンスに接続することもできます。
構成を更新するかどうか確認するポップアップ ダイアログ ボックスが表示されて、数分かかることが通知されます。 [はい] を選択します。
重要
有効化の操作が完了すると、キャッシュ インスタンス内のノードが再起動して新しい構成が読み込まれます。 そのため、この操作はメンテナンス期間中またはピーク営業時間外に実行することをお勧めします。 この操作には最大 30 分かかることがあります。
Azure CLI で Microsoft Entra ID を使用する方法については、ID のリファレンス ページを参照してください。
App.config ファイルを編集して、次の内容を追加します。
<appSettings> <add key="RedisHostName" value="your_redis_cache_hostname"/>
"your_Azure_Redis_hostname" を実際の Azure Redis ホスト名とポート番号に置き換えます。 たとえば、Azure Cache for Redis Enterprise に対しては
cache-name.eastus.redis.azure.net:10000
、Azure Cache for Redis サービスに対してはcache-name.redis.cache.windows.net:6380
などです。ファイルを保存します。
キャッシュ クライアントを構成する
このセクションでは、.NET に StackExchange.Redis クライアントを使用するようにコンソール アプリを準備します。
Visual Studio で、 [ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択し、[パッケージ マネージャー コンソール] ウィンドウから次のコマンドを実行します。
Install-Package Microsoft.Azure.StackExchangeRedis
インストールが完了すると、StackExchange.Redis キャッシュ クライアントをプロジェクトに使用できるようになります。
RedisConnection を使用してキャッシュに接続する
キャッシュへの接続は RedisConnection
クラスによって管理されます。 接続は、まず Program.cs
のこのステートメントで最初に行われます。
_redisConnection = await RedisConnection.InitializeAsync(redisHostName: ConfigurationManager.AppSettings["RedisHostName"].ToString());
CacheConnection appSetting の値は、Azure Portal からパスワード パラメーターとしてキャッシュ接続文字列を参照するために使用されます。
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 サーバーでは、ほとんどのデータが文字列として保存されますが、これらの文字列には、さまざまなデータ型を格納することができます。シリアル化したバイナリ データもその 1 つで、.NET のオブジェクトをキャッシュに保存する際に使用することができます。
Azure Cache for Redis は .NET オブジェクトとプリミティブ データ型の両方をキャッシュできますが、.NET オブジェクトをキャッシュするためには、あらかじめシリアル化しておく必要があります。
この .NET オブジェクトのシリアル化はアプリケーション開発者が行わなければなりません。逆にそのことでシリアライザーの選択に幅が生まれ、開発者にとってのメリットとなっています。
オブジェクトをシリアル化する簡単な方法の 1 つは、JsonConvert
のシリアル化メソッドを System.text.Json
で使用することです。
System.text.Json
名前空間を Visual Studio に追加します。
[ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
その後、[パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを実行します。
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 オブジェクトのシリアル化をテストします。
リソースをクリーンアップする
この記事で作成したリソースを引き続き使用する場合は、リソース グループを保持します。
それ以外の場合、リソースを使い終わったら、課金されないように、作成した Azure リソース グループを削除できます。
重要
リソース グループを削除すると、元に戻すことができません。 リソース グループを削除すると、そのリソース グループ内のすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 リソースを既存のリソース グループ内に作成し、そのリソース グループ内に保持したいリソースが含まれている場合は、リソース グループを削除するのではなく、各リソースを個別に削除できます。
リソース グループを削除するには
Azure portal にサインインし、 [リソース グループ] を選択します。
削除するリソース グループを選択します。
多数のリソース グループがある場合は、[任意のフィールドのフィルター...] ボックスを使用し、この記事用に作成したリソース グループの名前を入力します。 結果リストでリソース グループを選びます。
[リソース グループの削除] を選択します。
リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、[削除] を選択します。
しばらくすると、リソース グループとそのリソースのすべてが削除されます。