Azure Redis Cache の使用方法

このガイドでは、 Azure Redis Cacheの基本的な使用方法について説明します。 Microsoft Azure Redis Cache は、広く支持されているオープン ソースの Redis Cache がベースとなっています。 マイクロソフトによって管理されている、セキュリティで保護された専用の Redis cache にアクセスすることができます。 Azure Redis Cache を使用して作成されたキャッシュには、Microsoft Azure 内のあらゆるアプリケーションからアクセスすることができます。

Microsoft Azure Redis Cache には、次のレベルがあります。

  • Basic – 単一ノード。 複数のサイズ、最大 53 GB
  • Standard – 2 ノード (プライマリ/レプリカ)。 複数のサイズ、最大 53 GB 99.9% の SLA。
  • Premium – 最大 10 個のシャードがある 2 ノード (プライマリ/レプリカ)。 6 GB から 530 GB までの複数のサイズ。 Standard レベルのすべての機能と、Redis クラスターRedis の永続化Azure Virtual Network のサポートを含むその他の機能。 99.9% の SLA。

各レベルは、機能と価格ごとに異なります。 価格の詳細については、Cache の価格詳細に関するページをご覧ください。

このガイドでは、C# を使用する StackExchange.Redis クライアントの使用方法について説明します。 紹介するシナリオは、キャッシュの作成と構成キャッシュ クライアントの構成キャッシュでのオブジェクトの追加と削除などです。 Azure Redis Cache の使用方法の詳細については、「次のステップ」を参照してください。 Redis Cache で ASP.NET MVC Web アプリを作成する詳しい手順を示したチュートリアルについては、「 Redis Cache で Web アプリを作成する方法」を参照してください。

Azure Redis Cache の使用

Azure Redis Cache の導入は簡単です。 使い始めるには、キャッシュをプロビジョニングして構成します。 次に、キャッシュ クライアントを構成してキャッシュにアクセスできるようにします。 キャッシュ クライアントを構成すると、使い始めることができます。

キャッシュの作成

キャッシュを作成するには、まず Azure Portal にサインインし、[新規] > [データベース] > [Redis Cache] の順にクリックします。

注意

Azure アカウントがない場合は、数分あれば Azure アカウントを無料で作成 することができます。

新しいキャッシュ

注意

キャッシュは、Azure ポータルだけでなく、Resource Manager テンプレート、PowerShell、または Azure CLI を使用して作成することもできます。

[Redis Cache の新規作成] ブレードで、必要なキャッシュ構成を指定します。

キャッシュの作成

  • キャッシュ エンドポイントに使用する一意のキャッシュ名を [DNS 名] に入力します。 キャッシュ名は 1 ~ 63 文字の文字列で、数字、英字、- 文字のみを使用する必要があります。 キャッシュ名の先頭と末尾には - 文字を使用できません。また、連続する - 文字は無効です。
  • [サブスクリプション]で、キャッシュに使用する Azure サブスクリプションを選択します。 アカウントにサブスクリプションが 1 つしかない場合は自動的に選択されるため、 [サブスクリプション] ドロップダウン リストは表示されません。
  • [リソース グループ]で、キャッシュのリソース グループを選択または作成します。 詳細については、リソース グループを使用した Azure リソースの管理に関するページを参照してください。
  • [場所] を使用して、キャッシュのホストの地理的位置を指定します。 パフォーマンスを最大限に引き出すために、キャッシュは、キャッシュ クライアント アプリケーションと同じリージョンに作成することを強くお勧めします。
  • [価格レベル] を使用して、必要なキャッシュ サイズと機能を選択します。
  • Redis クラスター では、53 GB を超えるキャッシュを作成でき、複数の Redis ノード間でデータを共有することもできます。 詳細については、「 Premium Azure Redis Cache のクラスタリングの構成方法」を参照してください。
  • Redis の永続化 を使用して、Azure ストレージ アカウントにキャッシュを保持できます。 永続化の構成手順については、「 Premium Azure Redis Cache の永続性の構成方法」を参照してください。
  • Virtual Network では、指定された Azure Virtual Network 内にあるクライアントのみにキャッシュへのアクセス権を制限することで、セキュリティと分離が強化されます。 サブネット、アクセス制御ポリシー、およびその他の Redis へのアクセスをさらに制限する機能を始め、VNet のすべての機能を使用できます。 詳細については、「 Premium Azure Redis Cache の Virtual Network のサポートを構成する方法」を参照してください。
  • 新しいキャッシュでは、SSL を使用しないアクセスが既定で無効になっています。 非 SSL ポートを有効にするには、[ポート 6379 のブロックを解除 (SSL 暗号化されていません)] をオンにします。

新しいキャッシュ オプションを構成したら、 [作成]をクリックします。 キャッシュが作成されるまで数分かかる場合があります。 状態を確認するには、スタート画面で進行状況を監視してください。 キャッシュが作成されると、新しいキャッシュの状態が 実行中 になって、 既定の設定で使用できるようになります。

作成されたキャッシュ

作成したキャッシュにアクセスするには

キャッシュには、 Azure ポータル[参照] ブレードを使用してアクセスできます。

Azure Redis Cache の参照ブレード

キャッシュを表示するには、[その他のサービス] > [Redis Caches] をクリックします。 最近 Redis Cache を参照した場合は、[その他のサービス] をクリックしなくても一覧から [Redis Cache] を直接クリックできます。

目的のキャッシュを選択して表示し、そのキャッシュの設定を構成します。

Azure Redis Cache の参照キャッシュ リスト

キャッシュの表示と構成は、[Redis Cache] ブレードで行うことができます。

Redis Cache のすべての設定

キャッシュの構成の詳細については、「 Azure Redis Cache の構成方法」を参照してください。

キャッシュ クライアントの構成

.NET アプリケーションでは StackExchange.Redis キャッシュ クライアントを使用できます。キャッシュ クライアント アプリケーションの構成は、Visual Studio で NuGet パッケージを使用すると簡単です。

注意

詳細については、GitHub の StackExchange.Redis に関するページと StackExchange.Redis キャッシュ クライアントのドキュメントを参照してください。

Visual Studio で StackExchange.Redis NuGet パッケージを使用してクライアント アプリケーションを構成するには、ソリューション エクスプローラーでプロジェクトを右クリックし、[NuGet パッケージの管理] をクリックします。

Manage NuGet packages

検索ボックスに「StackExchange.Redis」または「StackExchange.Redis.StrongName」と入力し、結果の中から必要なバージョンを選択して、[インストール] をクリックします。

注意

厳密な名前を持つバージョンの StackExchange.Redis クライアント ライブラリを希望する場合は、[StackExchange.Redis.StrongName] を選択してください。それ以外の場合は、[StackExchange.Redis] を選択します。

StackExchange.Redis NuGet package

クライアント アプリケーションから StackExchange.Redis Cache クライアントを使用して Azure Redis Cache にアクセスするために必要なアセンブリ参照が NuGet パッケージによってダウンロードされ追加されます。

注意

StackExchange.Redis を使用するようにプロジェクトを構成していた場合、 NuGet パッケージ マネージャーから、そのパッケージへの更新プログラムを確認できます。 StackExchange.Redis NuGet パッケージの更新版を確認してインストールするには、[NuGet パッケージ マネージャー] ウィンドウで [更新プログラム] をクリックします。 StackExchange.Redis NuGet パッケージの更新プログラムがある場合は、新しいバージョンを使用するためにプロジェクトを更新できます。

このほか、[ツール] メニューで [NuGet パッケージ マネージャー][パッケージ マネージャー コンソール] の順にクリックし、[パッケージ マネージャー コンソール] ウィンドウで次のコマンドを実行する方法でも、StackExchange.Redis NuGet パッケージをインストールできます。

Install-Package StackExchange.Redis

クライアント プロジェクトをキャッシュ用に構成できたら、以降のセクションで説明されている、キャッシュを操作するための技法を使用できます。

キャッシュの操作

このセクションの手順では、キャッシュに対する一般的なタスクを行う方法について説明します。

キャッシュに接続する

プログラムでキャッシュを操作するには、キャッシュへの参照が必要です。 StackExchange.Redis クライアントを使用して Azure Redis Cache にアクセスするすべてのファイルの先頭に次のコードを追加します。

using StackExchange.Redis;

注意

StackExchange.Redis クライアントには、.NET Framework 4 以降が必要です。

Azure Redis Cache への接続には、 ConnectionMultiplexer クラスを使用します。 このクラスは、クライアント アプリケーションの開始から終了まで共有および再利用します。操作単位で作成する必要はありません。

Azure Redis Cache に接続して、接続済みの ConnectionMultiplexer インスタンスを取得するには、静的 Connect メソッドを呼び出して、キャッシュのエンドポイントとキーを渡します。 password パラメーターには、Azure Portal から生成されたキーを使用してください。

ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");

重要

警告: ソース コード内に資格情報を保存することは絶対に避けてください。 このサンプルでは、単純化するためにあえてソース コード内に記述しています。 資格情報を保存する方法については、アプリケーション文字列と接続文字列の動作に関するページを参照してください。

SSL を使用しない場合は、ssl=false を設定するか、ssl パラメーターを省略します。

注意

既定では、新しいキャッシュに対して非 SSL ポートは無効になっています。 非 SSL ポートを有効にする手順については、「アクセス ポート」を参照してください。

アプリケーション内の ConnectionMultiplexer インスタンスを共有する方法の 1 つに、次の例のように、接続されたインスタンスを返す静的プロパティを設定する方法があります。 このアプローチにより、接続された 1 つの ConnectionMultiplexer インスタンスだけがスレッドセーフな方法で初期化されます。 これらの例では、abortConnect が false に設定されており、Azure Redis Cache への接続が確立されていない場合でも呼び出しが成功します。 ConnectionMultiplexer の主な機能の 1 つは、ネットワーク問題などの原因が解決されると、キャッシュへの接続が自動的に復元されることです。

private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
    return ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");
});

public static ConnectionMultiplexer Connection
{
    get
    {
        return lazyConnection.Value;
    }
}

高度な接続構成オプションの詳細については、StackExchange.Redis の構成モデルに関するページを参照してください。

Azure Redis Cache のインスタンスに接続するには、キャッシュ クライアントにキャッシュのホスト名、ポート、およびキーが必要です。 一部のクライアントは、若干異なる名前で、これらの項目を参照できます。 この情報は、Azure Portal で取得するか、Azure CLI などのコマンドライン ツールを使用して取得することができます。

Azure Portal を使用して、ホスト名、ポート、およびアクセス キーを取得する

Azure Portal を使用してホスト名、ポート、およびアクセス キーを取得するには、Azure Portal でキャッシュを参照し、[リソース] メニューで [アクセス キー] および [プロパティ] をクリックします。

Redis cache settings

Azure CLI を使用して、ホスト名、ポート、およびアクセス キーを取得する

Azure CLI 2.0 を使用してホスト名とポートを取得するには az redis show を呼び出し、キーを取得するには az redis list-keys を呼び出します。 次のスクリプトでは、これらの 2 つのコマンドを呼び出し、コンソールにホスト名、ポート、およびキーを表示します。

#/bin/bash

# Retrieve the hostname, ports, and keys for contosoCache located in contosoGroup

# Retrieve the hostname and ports for an Azure Redis Cache instance
redis=($(az redis show --name contosoCache --resource-group contosoGroup --query [hostName,enableNonSslPort,port,sslPort] --output tsv))

# Retrieve the keys for an Azure Redis Cache instance
keys=($(az redis list-keys --name contosoCache --resource-group contosoGroup --query [primaryKey,secondaryKey] --output tsv))

# Display the retrieved hostname, keys, and ports
echo "Hostname:" ${redis[0]}
echo "Non SSL Port:" ${redis[2]}
echo "Non SSL Port Enabled:" ${redis[1]}
echo "SSL Port:" ${redis[3]}
echo "Primary Key:" ${keys[0]}
echo "Secondary Key:" ${keys[1]}

このスクリプトの詳細については、「Get the hostname, ports, and keys for Azure Redis Cache (Azure Redis Cache のホスト名、ポート、およびキーを取得する)」を参照してください。 Azure CLI 2.0 の詳細については、「Install Azure CLI 2.0 (Azure CLI 2.0 のインストール)」と「Get started with Azure CLI 2.0 (Azure CLI 2.0 の使用開始)」を参照してください。

接続が確立されたら、 ConnectionMultiplexer.GetDatabase メソッドを呼び出して Redis Cache データベースへの参照を取得します。 GetDatabase メソッドから返されるオブジェクトは、手付かずで受け渡しされる軽量のオブジェクトであり、保存する必要はありません。

// Connection refers to a property that returns a ConnectionMultiplexer
// as shown in the previous example.
IDatabase cache = Connection.GetDatabase();

// Perform cache operations using the cache object...
// Simple put of integral data types into the cache
cache.StringSet("key1", "value");
cache.StringSet("key2", 25);

// Simple get of data types from the cache
string key1 = cache.StringGet("key1");
int key2 = (int)cache.StringGet("key2");

Azure Redis Cache には、Redis Cache 内のデータを論理的に分離する目的に使用できるデータベースがあります (既定ではデータベースの数が 16 個ですが、設定により変更できます)。 詳細については、「What are Redis databases? (Redis データベースとは)」と「既定の Redis サーバー構成」を参照してください。

以上、Azure Redis Cache インスタンスに接続して、キャッシュ データベースへの参照を取得する方法を説明しました。今度は実際にキャッシュを使用してみましょう。

オブジェクトをキャッシュに追加する、キャッシュから削除する

キャッシュに項目を格納する、またはキャッシュから項目を取得するには、StringSet メソッドと StringGet メソッドを使用します。

// If key1 exists, it is overwritten.
cache.StringSet("key1", "value1");

string value = cache.StringGet("key1");

Redis では、ほとんどのデータが Redis 文字列として保存されますが、これらの文字列には、さまざまなデータ型を格納することができます。シリアル化したバイナリ データもその 1 つで、.NET のオブジェクトをキャッシュに保存する際に使用することができます。

StringGet を呼び出すと、オブジェクトが存在する場合はそのオブジェクトが返され、存在しない場合は null が返されます。 null が返された場合、目的のデータ ソースから値を取得してキャッシュに格納しておき、後で使用することができます。 この使用パターンは "キャッシュ アサイド パターン" といいます。

string value = cache.StringGet("key1");
if (value == null)
{
    // The item keyed by "key1" is not in the cache. Obtain
    // it from the desired data source and add it to the cache.
    value = GetValueFromDataSource();

    cache.StringSet("key1", value);
}

次の例で示すように、RedisValue も使用できます。 RedisValue には整数データ型を扱うための暗黙的な演算子があるので、null がキャッシュ項目で想定される値である場合に役立ちます。

RedisValue value = cache.StringGet("key1");
if (!value.HasValue)
{
    value = GetValueFromDataSource();
    cache.StringSet("key1", value);
}

キャッシュ内の項目の有効期限を指定するには、StringSetTimeSpan パラメーターを使用します。

cache.StringSet("key1", "value1", TimeSpan.FromMinutes(90));

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

Azure Redis Cache は .NET オブジェクトとプリミティブ データ型の両方をキャッシュできますが、.NET オブジェクトをキャッシュするためには、あらかじめシリアル化しておく必要があります。 この .NET オブジェクトのシリアル化はアプリケーション開発者が行わなければなりません。逆にそのことでシリアライザーの選択に幅が生まれ、開発者にとってのメリットとなっています。

オブジェクトをシリアル化する簡単な方法の 1 つは、Newtonsoft.Json.NETJsonConvert シリアル化方法を使用して、JSON へおよび JSON からシリアル化する方法です。 次の例では、 Employee オブジェクト インスタンスを使用した get および set を示しています。

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

    public Employee(int EmployeeId, string Name)
    {
        this.Id = EmployeeId;
        this.Name = Name;
    }
}

// Store to cache
cache.StringSet("e25", JsonConvert.SerializeObject(new Employee(25, "Clayton Gragg")));

// Retrieve from cache
Employee e25 = JsonConvert.DeserializeObject<Employee>(cache.StringGet("e25"));

次のステップ

これで、基本を学習できました。Azure Redis Cache の詳細については、次のリンク先を参照してください。