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

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

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

GitHub の (https://github.com/Azure-Samples/azure-cache-redis-samples/tree/main/quickstart/dotnet からリポジトリを複製します。

前提条件

キャッシュの作成

  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 のプロパティ

  1. CacheSecrets.config という名前のファイルをコンピューターに作成し、C:\AppSecrets\CacheSecrets.config に配置します。

  2. CacheSecrets.config ファイルを編集し、次の内容を追加します。

    <appSettings>
        <add key="CacheConnection" value="<host-name>,abortConnect=false,ssl=true,allowAdmin=true,password=<access-key>"/>
    </appSettings>
    
  3. <host-name> は実際のキャッシュ ホスト名に置き換えます。

  4. <access-key> は、実際のキャッシュのプライマリ キーに置き換えます。

  5. ファイルを保存します。

キャッシュ クライアントを構成する

このセクションでは、.NET に StackExchange.Redis クライアントを使用するようにコンソール アプリを準備します。

  1. Visual Studio で、 [ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択し、[パッケージ マネージャー コンソール] ウィンドウから次のコマンドを実行します。

    Install-Package StackExchange.Redis
    
  2. インストールが完了すると、StackExchange.Redis キャッシュ クライアントをプロジェクトに使用できるようになります。

シークレット キャッシュへ接続する

Visual Studio で App.config ファイルを開き、CacheSecrets.config ファイルを参照する appSettingsfile 属性が含まれていることを確認します。

<?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 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 に追加します。

  1. [ツール]>[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール]*の順に選択します。

  2. その後、[パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを実行します。

    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 にサインインし、 [リソース グループ] を選択します。

[名前でフィルター] ボックスにリソース グループの名前を入力します。 この記事の手順では、TestResources という名前のリソース グループを使用しました。 結果一覧でリソース グループの [...] を選択し、 [リソース グループの削除] を選択します。

削除

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

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

次のステップ