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

このクイック スタートでは、Azure 内の任意のアプリケーションからアクセスできるセキュリティで保護された専用キャッシュにアクセスするために、Azure Cache for Redis を .NET Framework アプリに組み込みます。In this quickstart, you incorporate Azure Cache for Redis into a .NET Framework app to have access to a secure, dedicated cache that is accessible from any application within Azure. 具体的には、.NET コンソール アプリで StackExchange.Redis クライアントと C# コードを使用します。You specifically use the StackExchange.Redis client with C# code in a .NET console app.

前提条件Prerequisites

キャッシュの作成Create a cache

  1. キャッシュを作成するには、Azure portal にサインインし、 [リソースの作成] を選択します。To create a cache, sign in to the Azure portal and select Create a resource.

    [リソースの作成] を選択します

  2. [新規] ページで、 [データベース] を選択し、 [Azure Cache for Redis] を選択します。On the New page, select Databases and then select Azure Cache for Redis.

    Azure Cache for Redis を選択する

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

    設定Setting 推奨値Suggested value 説明Description
    DNS 名DNS name グローバルに一意の名前を入力します。Enter a globally unique name. キャッシュ名は 1 から 63 文字の文字列で、数字、英字、ハイフンのみを使用する必要があります。The cache name must be a string between 1 and 63 characters that contains only numbers, letters, or hyphens. 名前の先頭と末尾には数字または文字を使用する必要があり、連続するハイフンを含めることはできません。The name must start and end with a number or letter, and can't contain consecutive hyphens. キャッシュ インスタンスの "ホスト名" は、 <DNS name>.redis.cache.windows.net になります。Your cache instance's host name will be <DNS name>.redis.cache.windows.net.
    サブスクリプションSubscription ドロップダウンで、ご自身のサブスクリプションを選択します。Drop down and select your subscription. この新しい Azure Cache for Redis インスタンスが作成されるサブスクリプション。The subscription under which to create this new Azure Cache for Redis instance.
    リソース グループResource group ドロップ ダウンでリソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの名前を入力します。Drop down and select a resource group, or select Create new and enter a new resource group name. その中にキャッシュやその他のリソースを作成するリソース グループの名前。Name for the resource group in which to create your cache and other resources. すべてのアプリ リソースを 1 つのリソース グループに配置することで、それらをまとめて簡単に管理または削除できます。By putting all your app resources in one resource group, you can easily manage or delete them together.
    場所Location ドロップ ダウンで場所を選択します。Drop down and select a location. キャッシュを使用する他のサービスの近くのリージョンを選択します。Select a region near other services that will use your cache.
    価格レベルPricing tier ドロップ ダウンで価格レベルを選択します。Drop down and select a Pricing tier. 価格レベルによって、キャッシュに使用できるのサイズ、パフォーマンス、および機能が決まります。The pricing tier determines the size, performance, and features that are available for the cache. 詳細については、Azure Cache for Redis の概要に関するページを参照してください。For more information, see Azure Cache for Redis Overview.
  4. [作成] を選択しますSelect Create.

    Azure Cache for Redis を作成する

    注意

    キャッシュのプロビジョニングには、約 15 分から 20 分かかると予想されます。You can expect the provisioning of the Cache to take around 15 to 20 minutes.

    Azure Cache for Redis の [概要] ページで進行状況を監視できます。You can monitor progress on the Azure Cache for Redis Overview page. [状態] に "実行中" と表示されている場合は、キャッシュを使用する準備ができています。When Status shows as Running, the cache is ready to use.

    Azure Cache for Redis が作成された

Azure portal からホスト名、ポート、アクセス キーを取得するRetrieve host name, ports, and access keys from the Azure portal

Azure Cache for Redis のインスタンスに接続するには、キャッシュ クライアントにキャッシュのホスト名、ポート、およびキーが必要です。To connect to an Azure Cache for Redis instance, cache clients need the host name, ports, and a key for the cache. クライアントによっては、これらの項目を参照するための名前が若干異なる場合があります。Some clients might refer to these items by slightly different names. ホスト名、ポート、およびキーは Azure portal から取得できます。You can get the host name, ports, and keys from the Azure portal.

  • アクセス キーを取得するには、キャッシュの左側のナビゲーションから [アクセス キー] を選択します。To get the access keys, from your cache left navigation, select Access keys.

    Azure Cache for Redis のキー

  • ホスト名とポートを取得するには、キャッシュの左側のナビゲーションから [プロパティ] を選択します。To get the host name and ports, from your cache left navigation, select Properties. ホスト名は、 <DNS name>.redis.cache.windows.net の形式になります。The host name is of the form <DNS name>.redis.cache.windows.net.

    Azure Cache for Redis のプロパティ

ご自分のコンピューター上に 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,allowAdmin=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.

[コンソール アプリ (.NET Framework)] を選択し、 [次へ] を選択してアプリを構成します。Select Console App (.NET Framework), and Next to configure your app. [プロジェクト名] を入力し、 [作成] をクリックして新しいコンソール アプリケーションを作成します。Type a Project name and click Create 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 Cache for Redis への接続には、ConnectionMultiplexer クラスを使用します。The connection to the Azure Cache for Redis 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 Cache for Redis への接続が確立されていない場合でも呼び出しが成功します。abortConnect is set to false, which means that the call succeeds even if a connection to the Azure Cache for Redis 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 = Connection.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());

    // Demonstrate "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...
    // Note that this requires the allowAdmin=true
    cacheCommand = "CLIENT LIST";
    Console.WriteLine("\nCache command  : " + cacheCommand);
    var endpoint = (System.Net.DnsEndPoint) Connection.GetEndPoints()[0];
    var server = Connection.GetServer(endpoint.Host, endpoint.Port);

    var clients = server.ClientList(); 
    Console.WriteLine("Cache response :");
    foreach (var client in clients)
    {
        Console.WriteLine(client.Raw);
    }

    lazyConnection.Value.Dispose();
}

Azure Cache for Redis には、Azure Cache for Redis 内のデータを論理的に分離する目的に使用できるデータベースがあります (既定ではデータベースの数が 16 個ですが、設定により変更できます)。Azure Cache for Redis has a configurable number of databases (default of 16) that can be used to logically separate the data within an Azure Cache for Redis. コードは、既定のデータベース DB 0 に接続されます。The code connects to the default database, 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 Cache for Redis は .NET オブジェクトとプリミティブ データ型の両方をキャッシュできますが、.NET オブジェクトをキャッシュするためには、あらかじめシリアル化しておく必要があります。Azure Cache for Redis 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 Cache for Redis を使用する方法を説明しました。In this quickstart, you learned how to use Azure Cache for Redis from a .NET application. ASP.NET Web アプリと Azure Cache for Redis を使用するには、次のクイック スタートに進みます。Continue to the next quickstart to use Azure Cache for Redis with an ASP.NET web app.

クラウドの支出を最適化して節約しますか?Want to optimize and save on your cloud spending?