クイックスタート: .NET アプリで Azure Cache for Redis を使用する
このクイック スタートでは、Azure 内の任意のアプリケーションからアクセスできるセキュリティで保護された専用キャッシュにアクセスするために、Azure Cache for Redis を .NET アプリに組み込みます。 具体的には、.NET コンソール アプリで StackExchange.Redis クライアントと C# コードを使用します。
GitHub のコードにスキップする
この記事では、サンプル アプリのコードを変更して、Azure Cache for Redis に接続する動作アプリを作成する方法について説明します。
すぐにコードに移動したい場合は、GitHub 上の .NET クイックスタート サンプルを参照してください。
前提条件
- 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 の [概要] ペインで監視できます。 [状態] に [実行中] と表示されたら、キャッシュを使用できます。
ホスト名、ポート、アクセス キーを取得する
キャッシュ クライアントが Azure Cache for Redis サーバーに接続するには、キャッシュのホスト名、ポート、アクセス キーが必要です。 一部のクライアントでは、これらの項目が少し異なる名前で呼ばれている場合があります。 ホスト名、ポート、キーは Azure portal で取得できます。
キャッシュのアクセス キーを取得するには:
- Azure portal で、キャッシュに移動します。
- サービス メニューの [設定] で、[認証] を選びます。
- [認証] ペインで、[アクセス キー] タブを選びます。
- アクセス キーの値をコピーするには、キー フィールドの [コピー] アイコンを選びます。
キャッシュのホスト名とポートを取得するには:
- Azure portal で、キャッシュに移動します。
- サービス メニューで、[概要] を選びます。
- [基本] の [ホスト名] で、[コピー] アイコンを選んでホスト名の値をコピーします。 ホスト名の値の形式は
<DNS name>.redis.cache.windows.net
です。 - [ポート] で、[コピー] アイコンを選んでポートの値をコピーします。
コンピューター上に CacheSecrets.config というファイルを作成します。これを *C:\AppSecrets* フォルダーに配置します。
CacheSecrets.config ファイルを編集し、次の内容を追加します。
<appSettings> <add key="CacheConnection" value="<host-name>,abortConnect=false,ssl=true,allowAdmin=true,password=<access-key>"/> </appSettings>
<host-name>
は実際のキャッシュ ホスト名に置き換えます。<access-key>
は、実際のキャッシュのプライマリ キーに置き換えます。
ファイルを保存します。
キャッシュ クライアントを構成する
このセクションでは、.NET に StackExchange.Redis クライアントを使用するようにコンソール アプリを準備します。
Visual Studio で、 [ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを実行します。
Install-Package StackExchange.Redis
インストールが完了すると、StackExchange.Redis キャッシュ クライアントをプロジェクトで使用できるようになります。
シークレット キャッシュへ接続する
Visual Studio で App.config ファイルを開き、CacheSecrets.config ファイルを参照する appSettings
file
属性が含まれていることを確認します。
<?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 Key Vault と証明書を使用することをお勧めします。
RedisConnection を使用してキャッシュに接続する
キャッシュへの接続は RedisConnection
クラスによって管理されます。 まず、Program.cs の次のステートメントで接続を作成します。
_redisConnection = await RedisConnection.InitializeAsync(connectionString: ConfigurationManager.AppSettings["CacheConnection"].ToString());
CacheConnection アプリ設定の値は、Azure portal からパスワード パラメーターとしてキャッシュ接続文字列を参照するために使用されます。
RedisConnection.cs では、StackExchange.Redis 名前空間は、RedisConnection
クラスに必須の using
ステートメントとして表示されます。
using StackExchange.Redis;
RedisConnection
クラス コードにより、キャッシュへの正常な接続が常に確保されます。 この接続は、StackExchange.Redis の ConnectionMultiplexer
インスタンスによって管理されます。 接続が失われ、自動的に再接続できない場合は、RedisConnection
クラスによって再び接続が作成されます。
詳細については、StackExchange.Redis および 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 で使用することです。
Visual Studio で System.text.Json 名前空間を追加します。
[ツール]>[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;
}
}
サンプルを実行する
コンソール アプリをビルドして実行し、.NET オブジェクトのシリアル化をテストするには、Ctrl + F5 キーを選択します。
リソースをクリーンアップする
この記事で作成したリソースを引き続き使用する場合は、リソース グループを保持します。
それ以外の場合、リソースに関連する課金が行われないようにするために、リソースの使用が終了したら、作成した Azure リソース グループを削除して構いません。
警告
リソース グループを削除すると、元に戻すことができません。 リソース グループを削除すると、そのリソース グループ内のすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 保持したいリソースを含む既存のリソース グループ内にリソースを作成した場合は、リソース グループを削除するのではなく、各リソースを個別に削除できます。
リソース グループを削除する
Azure portal にサインインし、 [リソース グループ] を選択します。
削除するリソース グループを選びます。
多数のリソース グループがある場合は、[任意フィールドのフィルター] に、この記事を完了するために作成したリソース グループの名前を入力します。 検索結果の一覧で、リソース グループを選びます。
[リソース グループの削除] を選択します。
[リソース グループの削除] ペインで、リソース グループの名前を入力して確認した後、[削除] を選びます。
しばらくすると、リソース グループとそのリソースのすべてが削除されます。