クイック スタート: .NET アプリで Azure Redis Cache を使用するQuickstart: Use Azure Redis Cache with a .NET application

このクイック スタートでは、.NET で Microsoft Azure Redis Cache を使用する方法について説明します。This quickstart shows you how to get started using Microsoft Azure Redis Cache with .NET. Microsoft Azure Redis Cache は、広く支持されているオープン ソースの Redis Cache がベースとなっています。Microsoft Azure Redis Cache is based on the popular open-source Redis Cache. マイクロソフトによって管理されている、セキュリティで保護された専用の Redis cache にアクセスすることができます。It gives you access to a secure, dedicated Redis cache, managed by Microsoft. Azure Redis Cache を使用して作成されたキャッシュには、Microsoft Azure 内のあらゆるアプリケーションからアクセスすることができます。A cache created using Azure Redis Cache is accessible from any application within Microsoft Azure.

このクイック スタートでは、コンソール アプリで StackExchange.Redis クライアントと C# コードを使用します。In this quickstart, you will use the StackExchange.Redis client with C# code in a console app. キャッシュを作成し、.NET クライアント アプリを構成します。You will create a cache and configure the .NET client app. 次に、キャッシュにオブジェクトを追加し、更新します。Then, you will add, and update objects in the cache.

完了したコンソール アプリ

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

キャッシュの作成Create a cache

キャッシュを作成するには、まず Azure Portal にサインインし、[リソースの作成] > [データベース] > [Redis Cache] の順にクリックします。To create a cache, first sign in to the Azure portal, and click Create a resource > Databases > Redis Cache.

新しいキャッシュ

[新規 Redis Cache] で、新しいキャッシュの設定を構成します。In New Redis Cache, configure the settings for your new cache.

SettingSetting 推奨値Suggested value [説明]Description
DNS 名DNS name グローバルに一意の名前Globally unique name キャッシュ名は 1 ~ 63 文字の文字列で、数字、英字、- 文字のみを使用する必要があります。The cache name must be a string between 1 and 63 characters and contain only numbers, letters, and the - character. キャッシュ名の先頭と末尾には - 文字を使用できません。また、連続する - 文字は無効です。The cache name cannot start or end with the - character, and consecutive - characters are not valid.
サブスクリプションSubscription 該当するサブスクリプションYour subscription この新しい Azure Redis Cache が作成されるサブスクリプション。The subscription under which this new Azure Redis Cache is created.
リソース グループResource Group TestResourcesTestResources その中にキャッシュを作成する新しいリソース グループの名前。Name for the new resource group in which to create your cache. アプリのすべてのリソースを 1 つのグループ内に配置することで、それらを一緒に管理できます。By putting all the resources for an app in a group, you can manage them together. たとえば、リソース グループを削除すれば、そのアプリに関連付けられているすべてのリソースが削除されます。For example, deleting the resource group would delete all resources associated with the app.
場所Location 米国東部East US キャッシュを使用する他のサービスの近くのリージョンを選択します。Choose a region near to other services that will use your cache.
価格レベルPricing tier Basic C0 (250 MB のキャッシュ)Basic C0 (250 MB Cache) 価格レベルによって、キャッシュのサイズ、パフォーマンス、および使用可能な機能が決まります。The pricing tier determines the size, performance, and features available for the cache. 詳細については、Azure Redis Cache の概要に関するページを参照してください。For more information, see Azure Redis Cache Overview.
ダッシュボードにピン留めするPin to dashboard オンSelected クリックすると、新しいキャッシュをダッシュ ボードにピン留めし、簡単に見つけられるようになります。Click pin the new cache to your dashboard making it easy to find.

キャッシュの作成

新しいキャッシュ設定を構成したら、[作成] をクリックします。Once the new cache settings are configured, click Create.

キャッシュが作成されるまで数分かかる場合があります。It can take a few minutes for the cache to be created. 状態を確認するには、ダッシュボードで進行状況を監視してください。To check the status, you can monitor the progress on the dashboard. キャッシュが作成されると、新しいキャッシュの状態が 実行中 になり、使用できるようになります。After the cache has been created, your new cache has a Running status and is ready for use.

作成されたキャッシュ

Azure Portal を使用して、ホスト名、ポート、およびアクセス キーを取得するRetrieve host name, ports, and access keys using the Azure Portal

Azure Redis Cache のインスタンスに接続するときには、キャッシュ クライアントにキャッシュのホスト名、ポート、およびキーが必要です。When connecting to an Azure Redis Cache instance, cache clients need the host name, ports, and a key for the cache. 一部のクライアントは、若干異なる名前で、これらの項目を参照できます。Some clients may refer to these items by slightly different names. この情報は、Azure Portal で取得できます。You can retrieve this information in the Azure portal.

Azure Portal を使用してアクセス キーを取得するには、キャッシュを参照して、[アクセス キー] をクリックします。To retrieve the access keys using the Azure portal, browse to your cache and click Access keys.

Redis Cache のキー

ホスト名やポートを取得するには、[プロパティ] をクリックします。To retrieve host name, ports, click Properties.

Redis cache properties

コンピューター上に CacheSecrets.config という名前のファイルを作成し、サンプル アプリケーションのソース コードでチェックインされない場所に置きます。Create a file on your computer named CacheSecrets.config and place it in a location where it won't be checked in with the source code of your sample application. このクイック スタートでは、CacheSecrets.config ファイルを C:\AppSecrets\CacheSecrets.config に配置します。For this quickstart, the CacheSecrets.config file is located here, C:\AppSecrets\CacheSecrets.config.

CacheSecrets.config ファイルを編集し、次の内容を追加します。Edit the CacheSecrets.config file and add the following contents:

<appSettings>
    <add key="CacheConnection" value="<cache-name>.redis.cache.windows.net,abortConnect=false,ssl=true,password=<access-key>"/>
</appSettings>

<cache-name> は実際のキャッシュ ホスト名に置き換えます。Replace <cache-name> with your cache host name.

<access-key> は、実際のキャッシュのプライマリ キーに置き換えます。Replace <access-key> with the primary key for your cache.

コンソール アプリを作成するCreate a console app

Visual Studio で、[ファイル] > [新規] > [プロジェクト] をクリックします。In Visual Studio, click File > New > Project.

Visual C#Windows Classic Desktop をクリックし、コンソール アプリ[OK] の順にクリックし、新しいコンソール アプリを作成します。Under Visual C#, click Windows Classic Desktop and then click Console App, and OK to create a new console application.

キャッシュ クライアントの構成Configure the cache client

このセクションでは、.NET に StackExchange.Redis クライアントを使用するようにコンソール アプリを構成します。In this section, you will configure the console application to use the StackExchange.Redis client for .NET.

Visual Studio で、[ツール] > [NuGet パッケージ マネージャー] > [パッケージ マネージャー コンソール] の順にクリックし、[パッケージ マネージャー コンソール] ウィンドウから次のコマンドを実行します。In Visual Studio, click Tools > NuGet Package Manager > Package Manager Console, and run the following command from the Package Manager Console window.

Install-Package StackExchange.Redis

インストールが完了すると、StackExchange.Redis キャッシュ クライアントをプロジェクトに使用できるようになります。Once the installation is completed, the StackExchange.Redis cache client is available to use with your project.

キャッシュに接続するConnect to the cache

Visual Studio で App.config ファイルを開き、CacheSecrets.config ファイルを参照する appSettings file 属性を含むように更新します。In Visual Studio, open your App.config file and update it to include an appSettings file attribute that references the CacheSecrets.config file.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" />
    </startup>

    <appSettings file="C:\AppSecrets\CacheSecrets.config"></appSettings>  

</configuration>

ソリューション エクスプローラーで [参照] を右クリックし、[参照を追加] をクリックします。In Solution Explorer, right-click References and click Add a reference. System.Configuration アセンブリへの参照を追加します。Add a reference to the System.Configuration assembly.

次の using ステートメントを Program.cs に追加します。Add the following using statements to Program.cs:

using StackExchange.Redis;
using System.Configuration;

Azure Redis Cache への接続には、 ConnectionMultiplexer クラスを使用します。The connection to the Azure Redis Cache is managed by the ConnectionMultiplexer class. このクラスは、クライアント アプリ全体で共有して再利用する必要があります。This class should be shared and reused throughout your client application. 操作ごとに新しい接続を作成しないでください。Do not create a new connection for each operation.

ソース コード内に資格情報を保存することは絶対に避けてください。Never store credentials in source code. このサンプルを単純にするために、外部のシークレット構成ファイルのみを使用しています。To keep this sample simple, I’m only using an external secrets config file. 実際には Azure Key Vault と証明書を使用することをお勧めします。A better approach would be to use Azure Key Vault with certificates.

Program.cs で、次のメンバーをコンソール アプリの Program クラスに追加します。In Program.cs, add the following members to the Program class of your console application:

        private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
        {
            string cacheConnection = ConfigurationManager.AppSettings["CacheConnection"].ToString();
            return ConnectionMultiplexer.Connect(cacheConnection);
        });

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

アプリで ConnectionMultiplexer インスタンスを共有するこの方法では、接続されたインスタンスを返す静的プロパティを使用します。This approach to sharing a ConnectionMultiplexer instance in your application uses a static property that returns a connected instance. このコードにより、接続された 1 つの ConnectionMultiplexer インスタンスだけがスレッドセーフな方法で初期化されます。The code provides a thread-safe way to initialize only a single connected ConnectionMultiplexer instance. abortConnect は false に設定されており、Azure Redis Cache への接続が確立されていない場合でも呼び出しが成功します。abortConnect is set to false, which means that the call succeeds even if a connection to the Azure Redis Cache is not established. ConnectionMultiplexer の主な機能の 1 つは、ネットワーク問題などの原因が解決されると、キャッシュへの接続が自動的に復元されることです。One key feature of ConnectionMultiplexer is that it automatically restores connectivity to the cache once the network issue or other causes are resolved.

CacheConnection appSetting の値は、Azure Portal からパスワード パラメーターとしてキャッシュ接続文字列を参照するために使用されます。The value of the CacheConnection appSetting is used to reference the cache connection string from the Azure portal as the password parameter.

キャッシュ コマンドの実行Executing cache commands

コンソール アプリの Program クラスの Main プロシージャに次のコードを追加します。Add the following code for the Main procedure of the Program class for your console application:

        static void Main(string[] args)
        {
            // Connection refers to a property that returns a ConnectionMultiplexer
            // as shown in the previous example.
            IDatabase cache = lazyConnection.Value.GetDatabase();

            // Perform cache operations using the cache object...

            // Simple PING command
            string cacheCommand = "PING";
            Console.WriteLine("\nCache command  : " + cacheCommand);
            Console.WriteLine("Cache response : " + cache.Execute(cacheCommand).ToString());

            // Simple get and put of integral data types into the cache
            cacheCommand = "GET Message";
            Console.WriteLine("\nCache command  : " + cacheCommand + " or StringGet()");
            Console.WriteLine("Cache response : " + cache.StringGet("Message").ToString());

            cacheCommand = "SET Message \"Hello! The cache is working from a .NET console app!\"";
            Console.WriteLine("\nCache command  : " + cacheCommand + " or StringSet()");
            Console.WriteLine("Cache response : " + cache.StringSet("Message", "Hello! The cache is working from a .NET console app!").ToString());

            // Demostrate "SET Message" executed as expected...
            cacheCommand = "GET Message";
            Console.WriteLine("\nCache command  : " + cacheCommand + " or StringGet()");
            Console.WriteLine("Cache response : " + cache.StringGet("Message").ToString());

            // Get the client list, useful to see if connection list is growing...
            cacheCommand = "CLIENT LIST";
            Console.WriteLine("\nCache command  : " + cacheCommand);
            Console.WriteLine("Cache response : \n" + cache.Execute("CLIENT", "LIST").ToString().Replace("id=", "id="));

            lazyConnection.Value.Dispose();
        }

Azure Redis Cache には、Redis Cache 内のデータを論理的に分離する目的に使用できるデータベースがあります (既定ではデータベースの数が 16 個ですが、設定により変更できます)。 コードは、既定のデータベース DB 0 に接続されます。 詳細については、「What are Redis databases? (Redis データベースとは)」と「既定の Redis サーバー構成」を参照してください。For more information, see What are Redis databases? and Default Redis server configuration.

キャッシュ項目の格納と取得には、StringSet および StringGetメソッドを使用します。Cache items can be stored and retrieved by using the StringSet and StringGet methods.

Redis では、ほとんどのデータが Redis 文字列として保存されますが、これらの文字列には、さまざまなデータ型を格納することができます。シリアル化したバイナリ データもその 1 つで、.NET のオブジェクトをキャッシュに保存する際に使用することができます。Redis stores most data as Redis strings, but these strings can contain many types of data, including serialized binary data, which can be used when storing .NET objects in the cache.

Ctrl + F5 キーを押してアプリをビルドし、実行します。Press Ctrl+F5 to build and run the console app.

次の例では、Message キーは、前に Azure portal の Redis コンソールを使って設定されたキャッシュ値を持っていたことがわかります。In the example below, you can see the Message key previously had a cached value, which was set using the Redis Console in the Azure portal. アプリは、そのキャッシュ値を更新しました。The app updated that cached value. また、アプリは PING および CLIENT LIST コマンドも実行しました。The app also executed the PING and CLIENT LIST commands.

コンソール アプリの一部

キャッシュ内で .NET オブジェクトを使用するWork with .NET objects in the cache

Azure Redis Cache は .NET オブジェクトとプリミティブ データ型の両方をキャッシュできますが、.NET オブジェクトをキャッシュするためには、あらかじめシリアル化しておく必要があります。Azure Redis Cache can cache both .NET objects and primitive data types, but before a .NET object can be cached it must be serialized. この .NET オブジェクトのシリアル化はアプリケーション開発者が行わなければなりません。逆にそのことでシリアライザーの選択に幅が生まれ、開発者にとってのメリットとなっています。This .NET object serialization is the responsibility of the application developer, and gives the developer flexibility in the choice of the serializer.

オブジェクトをシリアル化する簡単な方法の 1 つは、Newtonsoft.JsonJsonConvert シリアル化方法を使用して、JSON へおよび JSON からシリアル化する方法です。One simple way to serialize objects is to use the JsonConvert serialization methods in Newtonsoft.Json and serialize to and from JSON. このセクションでは、.NET オブジェクトをキャッシュに追加します。In this section, you will add a .NET object to the cache.

Visual Studio で、[ツール] > [NuGet パッケージ マネージャー] > [パッケージ マネージャー コンソール] の順にクリックし、[パッケージ マネージャー コンソール] ウィンドウから次のコマンドを実行します。In Visual Studio, click Tools > NuGet Package Manager > Package Manager Console, and run the following command from the Package Manager Console window.

Install-Package Newtonsoft.Json

Program.cs の先頭に次の using ステートメントを追加します。Add the following using statement to the top of Program.cs:

using Newtonsoft.Json;

次の Employee クラス定義を Program.cs に追加します。Add the following Employee class definition to 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)
            {
                this.Id = EmployeeId;
                this.Name = Name;
                this.Age = Age;
            }
        }

Program.csMain() プロシージャの一番下と、Dispose() の呼び出しの前に、シリアライズ化された .NET オブジェクトをキャッシュして取得する以下のコード行を追加します。At the bottom of Main() procedure in Program.cs, and before the call to Dispose(), add the following lines of code to cache and retrieve a serialized .NET object:

            // Store .NET object to cache
            Employee e007 = new Employee("007", "Davide Columbo", 100);
            Console.WriteLine("Cache response from storing Employee .NET object : " + 
                cache.StringSet("e007", JsonConvert.SerializeObject(e007)));

            // Retrieve .NET object from cache
            Employee e007FromCache = JsonConvert.DeserializeObject<Employee>(cache.StringGet("e007"));
            Console.WriteLine("Deserialized Employee .NET object :\n");
            Console.WriteLine("\tEmployee.Name : " + e007FromCache.Name);
            Console.WriteLine("\tEmployee.Id   : " + e007FromCache.Id);
            Console.WriteLine("\tEmployee.Age  : " + e007FromCache.Age + "\n");

Ctrl + F5 キーを押してコンソール アプリをビルドして実行し、.NET オブジェクトのシリアル化をテストします。Press Ctrl+F5 to build and run the console app to test serialization of .NET objects.

完了したコンソール アプリ

リソースのクリーンアップClean up resources

次のチュートリアルに進む場合は、このクイック スタートで作成したリソースを維持して、再利用することができます。If you will be continuing to the next tutorial, you can keep the resources created in this quickstart and reuse them.

クイック スタートのサンプル アプリケーションの使用を終える場合は、課金を避けるために、このクイック スタートで作成した Azure リソースを削除することができます。Otherwise, if you are finished with the quickstart sample application, you can delete the Azure resources created in this quickstart to avoid charges.

重要

いったん削除したリソース グループを元に戻すことはできません。リソース グループとそこに存在するすべてのリソースは完全に削除されます。Deleting a resource group is irreversible and that the resource group and all the resources in it are permanently deleted. 間違ったリソース グループやリソースをうっかり削除しないようにしてください。Make sure that you do not accidentally delete the wrong resource group or resources. このサンプルのホストとなるリソースを、保持するリソースが含まれている既存のリソース グループ内に作成した場合は、リソース グループを削除するのではなく、個々のブレードから各リソースを個別に削除することができます。If you created the resources for hosting this sample inside an existing resource group that contains resources you want to keep, you can delete each resource individually from their respective blades instead of deleting the resource group.

Azure ポータル にサインインし、 [リソース グループ] をクリックします。Sign in to the Azure portal and click Resource groups.

[名前でフィルター] ボックスにリソース グループの名前を入力します。In the Filter by name... textbox, type the name of your resource group. この記事の手順では、TestResources という名前のリソース グループを使用しました。The instructions for this article used a resource group named TestResources. 結果一覧でリソース グループの [...] をクリックし、[リソース グループの削除] をクリックします。On your resource group in the result list, click ... then Delete resource group.

削除

リソース グループの削除の確認を求めるメッセージが表示されます。You will be asked to confirm the deletion of the resource group. 確認のためにリソース グループの名前を入力し、[削除] をクリックします。Type the name of your resource group to confirm, and click Delete.

しばらくすると、リソース グループとそこに含まれているすべてのリソースが削除されます。After a few moments, the resource group and all of its contained resources are deleted.

次の手順Next steps

このクイック スタートでは、.NET アプリから Azure Redis Cache を使用する方法を説明しました。In this quickstart, you learned how to use Azure Redis Cache from a .NET application. ASP.NET Web アプリで Redis Cache を使用するには、次のクイック スタートに進みます。Continue to the next quickstart to use Redis Cache with an ASP.NET web app.