次の方法で共有


クイックスタート: .NET Core アプリで Azure Cache for Redis を使用する

このクイックスタートでは、Azure 内の任意のアプリケーションからアクセスできる安全な専用キャッシュへのアクセスを実現するために Azure Cache for Redis を .NET Core アプリに組み込みます。 具体的には、.NET Core コンソール アプリで StackExchange.Redis クライアントと C# コードを使用します。

コードにスキップする

この記事では、サンプル アプリのコードを変更して、Azure Cache for Redis に接続する動作アプリを作成する方法について説明します。

すぐにサンプル コードに移動したい場合は、GitHub 上の .NET Core クイックスタート サンプルを参照してください。

前提条件

キャッシュの作成

  1. キャッシュを作成するには、Azure portal にサインインします。 ポータル メニューで、[リソースの作成] を選択します。

    Azure portal の左側のナビゲーション ウィンドウ上で強調表示されている [リソースの作成] オプションを示すスクリーンショット。

  2. [作業の開始] ペインで、検索バーに「Azure Cache for Redis」と入力します。 検索結果で、Azure Cache for Redis を見つけた後、[作成] を選択します。

    検索ボックスに Azure Cache for Redis が入力され、[作成] ボタンが強調表示されている Azure Marketplace を示すスクリーンショット。

  3. [新しい 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 の概要に関するページを参照してください。
  4. [ネットワーク] タブを選択するか、[次へ: ネットワーク] を選択します。

  5. [ネットワーク] タブで、キャッシュで使用する接続方法を選択します。

  6. [詳細] タブを選択するか、[次へ: 詳細] を選択します。

  7. [詳細] ペインで、以下の情報に基づいて認証方法を確認または選択します。

    [詳細] ペインと選択できる利用可能なオプションを示すスクリーンショット。

    • 既定では、新しい 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 の使用」を参照してください。

  8. (省略可能) [タグ] タブを選択するか、[次へ: タグ] を選択します。

  9. (省略可能) キャッシュ リソースを分類したい場合は、[タグ] タブで、タグの名前と値を入力します。

  10. [確認および作成] ボタンを選択します。

    [確認と作成] タブでは、Azure が構成を自動的に検証します。

  11. 緑色の検証に成功のメッセージが表示された後、 [作成] を選択します。

新しいキャッシュのデプロイは数分で完了します。 デプロイの進行状況は、Azure Cache for Redis の [概要] ペインで監視できます。 [状態][実行中] と表示されると、キャッシュの使用の準備が完了しています。

ホスト名、ポート、アクセス キーを取得する

Azure Cache for Redis サーバーに接続するために、キャッシュ クライアントはキャッシュのホスト名、ポート、アクセス キーを必要とします。 一部のクライアントは、これらの項目を若干異なる名前を使用して参照している場合があります。 ホスト名、ポート、キーは Azure portal で取得できます。

  • キャッシュのアクセス キーを取得するには:

    1. Azure portal で、キャッシュに移動します。
    2. サービス メニューの [設定] で、[認証] を選択します。
    3. [認証] ペインで、[アクセス キー] タブを選択します。
    4. アクセス キーの値をコピーするには、キー フィールドの [コピー] アイコンを選択します。

    Azure Cache for Redis のインスタンスのアクセス キーを見つけてコピーする方法を示すスクリーンショット。

  • キャッシュのホスト名とポートを取得するには:

    1. Azure portal で、キャッシュに移動します。
    2. サービス メニューで、[概要] を選択します。
    3. [基本][ホスト名] で、[コピー] アイコンを選択してホスト名の値をコピーします。 ホスト名の値の形式は <DNS name>.redis.cache.windows.net です。
    4. [ポート] で、[コピー] アイコンを選択してポートの値をコピーします。

    Azure Cache for Redis のインスタンスのホスト名とポートを見つけてコピーする方法を示すスクリーンショット。

ホスト名プライマリ アクセス キーの値をメモします。 これらの値は、後で CacheConnection シークレットを構築するために使用します。

接続文字列のローカル シークレットを追加する

コマンド プロンプト ウィンドウで、次のコマンドを実行して、CacheConnection という名前の新しいシークレットを保存します。 以下の (山かっこを含む) プレースホルダーをキャッシュ名 (<cache name>) とプライマリ アクセス キー (<primary-access-key>) に置き換えます。

dotnet user-secrets set CacheConnection "<cache name>.redis.cache.windows.net,abortConnect=false,ssl=true,allowAdmin=true,password=<primary-access-key>"

RedisConnection を使用してキャッシュに接続する

キャッシュへの接続は RedisConnection クラスによって管理されます。 まず、Program.cs 内の次のステートメントで接続を作成します。

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

RedisConnection.cs では、StackExchange.Redis 名前空間がコードに追加されます。 この名前空間は RedisConnection クラスで必要になります。

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

StringSetAsyncStringGetAsync メソッドを使用することで、キャッシュ アイテムの保存と取得を行えます。

この例では、Message キーが値に設定されていることを確認できます。 アプリは、そのキャッシュ値を更新しました。 また、アプリは PING およびコマンドも実行しました。

キャッシュ内で .NET オブジェクトを使用する

Redis サーバーは、ほとんどのデータを文字列形式で保存します。 これらの文字列には、シリアル化されたバイナリ データなど、さまざまな種類のデータを含めることができます。 シリアル化されたバイナリ データは、.NET オブジェクトをキャッシュに保存するときに使用できます。

Azure Cache for Redis は、.NET オブジェクトとプリミティブ データ型の両方をキャッシュできますが、.NET オブジェクトをキャッシュするためには、それをあらかじめシリアル化しておく必要があります。

.NET オブジェクトのシリアル化は、アプリケーション開発者の責任です。 オブジェクトのシリアル化では、開発者はシリアライザーを柔軟に選択できます。

次の Employee クラスは Program.cs で定義されており、シリアル化されたオブジェクトを取得および設定する方法も示しています。

class Employee
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

        public Employee(string id, string name, int age)
        {
            Id = id;
            Name = name;
            Age = age;
        }
    }

サンプルを実行する

何らかのファイルを開いた場合は、それらのファイルを保存します。 そして、次のコマンドを使用してアプリをビルドします。

dotnet build

.NET オブジェクトのシリアル化をテストするには、次のコマンドを実行します。

dotnet run

コンソール テストが完了したことを示すスクリーンショット。

リソースをクリーンアップする

この記事で作成したリソースを引き続き使用する場合は、リソース グループを保持します。

それ以外の場合、リソースに関連する課金が行われないようにするために、リソースの使用が終了したら、作成した Azure リソース グループを削除して構いません。

警告

リソース グループを削除すると、元に戻すことができません。 リソース グループを削除すると、そのリソース グループ内のすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 保持したいリソースを含む既存のリソース グループ内にリソースを作成した場合は、リソース グループを削除するのではなく、各リソースを個別に削除します。

リソース グループを削除する

  1. Azure portal にサインインし、 [リソース グループ] を選択します。

  2. 削除するリソース グループを選択します。

    多数のリソース グループがある場合は、[任意フィールドのフィルター] に、この記事を完了するために作成したリソース グループの名前を入力します。 検索結果の一覧で、リソース グループを選択します。

    削除対象を選択するためのリソース グループの一覧を示すスクリーンショット。

  3. [リソース グループの削除] を選択します。

  4. [リソース グループの削除] ペインで、リソース グループの名前を入力して確認を行った後、[削除] を選択します。

    削除を確認するためにリソース名の入力が必要なボックスを示すスクリーンショット。

しばらくすると、リソース グループとそのリソースのすべてが削除されます。