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

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

GitHub のコードにスキップする

GitHub でリポジトリ https://github.com/Azure-Samples/azure-cache-redis-samples/tree/main/quickstart/dotnet-core をクローンします。

前提条件

キャッシュの作成

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

    左側のナビゲーション ペインの [リソースの作成] が強調表示されています。

  2. [新規] ページで、 [データベース] を選択し、 [Azure Cache for Redis] を選択します。

    [新規] で、 [データベース] が強調表示され、[Azure Cache for Redis] が強調表示されています。

  3. [新規 Redis Cache] ページで、新しいキャッシュの設定を構成します。

    設定 値を選択する 説明
    サブスクリプション ドロップダウンで、ご自身のサブスクリプションを選択します。 この新しい Azure Cache for Redis インスタンスが作成されるサブスクリプション。
    リソース グループ ドロップ ダウンでリソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの名前を入力します。 その中にキャッシュやその他のリソースを作成するリソース グループの名前。 すべてのアプリ リソースを 1 つのリソース グループに配置することで、それらをまとめて簡単に管理または削除できます。
    DNS 名 一意の名前を入力します。 キャッシュ名は 1 から 63 文字の文字列で、数字、英字、ハイフンのみを使用する必要があります。 名前の先頭と末尾には数字または文字を使用する必要があり、連続するハイフンを含めることはできません。 キャッシュ インスタンスの "ホスト名" は、<DNS 名>.redis.cache.windows.net になります。
    場所 ドロップ ダウンで場所を選択します。 キャッシュを使用する他のサービスの近くのリージョンを選択します。
    キャッシュの種類 ドロップ ダウンでレベルを選択します。 レベルによって、キャッシュに使用できるのサイズ、パフォーマンス、および機能が決まります。 詳細については、Azure Cache for Redis の概要に関するページを参照してください。
  4. [ネットワーク] タブを選択するか、ページの下部にある [ネットワーク] ボタンを選択します。

  5. [ネットワーク] タブで、接続方法を選択します。

  6. [次へ: 詳細] タブを選択するか、ページの下部にある [次へ: 詳細] ボタンを選択します。

  7. Basic または Standard のキャッシュ インスタンスの [詳細] タブで、非 TLS ポートを有効にする場合は有効トグルをオンにします。 また、使用する Redis のバージョンを 4 または 6 から選択できます。

    Redis バージョン 4 または 6。

  8. Premium キャッシュ インスタンスの [詳細] タブで、非 TLS ポート、クラスタリング、データ永続化の設定を構成します。 また、使用する Redis のバージョンを 4 または 6 から選択できます。

  9. ページの下部にある [次へ: タグ] タブを選択するか、ページの下部にある [次へ: タグ] ボタンを選択します。

  10. 必要に応じて、 [タグ] タブで、リソースを分類する場合は名前と値を入力します。

  11. [Review + create](レビュー + 作成) を選択します。 [確認および作成] タブが表示され、Azure によって構成が検証されます。

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

キャッシュが作成されるまで、しばらく時間がかかります。 Azure Cache for Redis の [概要] ページで進行状況を監視できます。 [状態] に "実行中" と表示されている場合は、キャッシュを使用する準備ができています。

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

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

  • アクセス キーを取得するには、キャッシュの左側のナビゲーションから [アクセス キー] を選択します。

    Azure Cache for Redis のキー

  • ホスト名とポートを取得するには、キャッシュの左側のナビゲーションから [プロパティ] を選択します。 ホスト名は、<DNS 名>.redis.cache.windows.net の形式になります。

    Azure Cache for Redis のプロパティ

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

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

コマンド ウィンドウで、キャッシュ名とプライマリ アクセス キーのプレースホルダー (角かっこを含む) を置き換えた後、次のコマンドを実行して CacheConnection という新しいシークレットを保存します。

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 と、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 オブジェクトのシリアル化はアプリケーション開発者が行わなければなりません。逆にそのことでシリアライザーの選択に幅が生まれ、開発者にとってのメリットとなっています。

シリアル化オブジェクトの取得および設定方法もサンプルで示すことができるよう、次の 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. [名前でフィルター] ボックスにリソース グループの名前を入力します。 この記事の手順では、TestResources という名前のリソース グループを使用しました。 結果一覧でリソース グループの [...] を選択し、 [リソース グループの削除] を選択します。

    削除

  3. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

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

次のステップ