ASP.NET Core での分散キャッシュDistributed caching in ASP.NET Core

Mohsin Nasir上田 SmithBy Mohsin Nasir and Steve Smith

分散キャッシュは、複数のアプリサーバーによって共有されるキャッシュであり、通常、それにアクセスするアプリサーバーに外部サービスとして保持されます。A distributed cache is a cache shared by multiple app servers, typically maintained as an external service to the app servers that access it. 分散キャッシュを使用すると、特にアプリがクラウドサービスまたはサーバーファームでホストされている場合に、ASP.NET Core アプリのパフォーマンスとスケーラビリティを向上させることができます。A distributed cache can improve the performance and scalability of an ASP.NET Core app, especially when the app is hosted by a cloud service or a server farm.

分散キャッシュには、キャッシュされたデータが個々のアプリサーバーに格納される他のキャッシュシナリオよりも、いくつかの利点があります。A distributed cache has several advantages over other caching scenarios where cached data is stored on individual app servers.

キャッシュされたデータが分散されると、データは次のようになります。When cached data is distributed, the data:

  • は、複数のサーバーに対する複数の要求にわたっ て一貫し ています。Is coherent (consistent) across requests to multiple servers.
  • サーバーの再起動とアプリのデプロイが行われます。Survives server restarts and app deployments.
  • はローカルメモリを使用しません。Doesn't use local memory.

分散キャッシュの構成は実装固有です。Distributed cache configuration is implementation specific. この記事では、SQL Server と Redis の分散キャッシュを構成する方法について説明します。This article describes how to configure SQL Server and Redis distributed caches. Ncache (GitHub の ncache) などのサードパーティの実装も利用できます。Third party implementations are also available, such as NCache (NCache on GitHub). どの実装が選択されているかにかかわらず、アプリはインターフェイスを使用してキャッシュと対話し IDistributedCache ます。Regardless of which implementation is selected, the app interacts with the cache using the IDistributedCache interface.

サンプル コードを表示またはダウンロードします (ダウンロード方法)。View or download sample code (how to download)

必須コンポーネントPrerequisites

SQL Server 分散キャッシュを使用するには、パッケージ への参照を追加しますTo use a SQL Server distributed cache, add a package reference to the Microsoft.Extensions.Caching.SqlServer package.

Redis 分散キャッシュを使用するには、 StackExchangeRedis パッケージへのパッケージ参照を追加します。To use a Redis distributed cache, add a package reference to the Microsoft.Extensions.Caching.StackExchangeRedis package.

NCache 分散キャッシュを使用するには、パッケージ参照を Ncache. Microsoft. Extensions. cache-control. OpenSource パッケージに追加します。To use NCache distributed cache, add a package reference to the NCache.Microsoft.Extensions.Caching.OpenSource package.

IDistributedCache インターフェイスIDistributedCache interface

インターフェイスには、 IDistributedCache 分散キャッシュ実装の項目を操作するための次のメソッドが用意されています。The IDistributedCache interface provides the following methods to manipulate items in the distributed cache implementation:

  • Get, GetAsync : 文字列キーを受け取り、 byte[] キャッシュ内に存在する場合は、キャッシュされた項目を配列として取得します。Get, GetAsync: Accepts a string key and retrieves a cached item as a byte[] array if found in the cache.
  • SetSetAsync : 文字列キーを使用して、キャッシュに項目 (配列として byte[] ) を追加します。Set, SetAsync: Adds an item (as byte[] array) to the cache using a string key.
  • Refresh: は、 RefreshAsync キーに基づいてキャッシュ内の項目を更新し、スライド式有効期限タイムアウト (存在する場合) をリセットします。Refresh, RefreshAsync: Refreshes an item in the cache based on its key, resetting its sliding expiration timeout (if any).
  • RemoveRemoveAsync : 文字列キーに基づいてキャッシュ項目を削除します。Remove, RemoveAsync: Removes a cache item based on its string key.

分散キャッシュサービスを確立するEstablish distributed caching services

のの実装を IDistributedCache に登録 Startup.ConfigureServices します。Register an implementation of IDistributedCache in Startup.ConfigureServices. このトピックで説明するフレームワークに用意されている実装は次のとおりです。Framework-provided implementations described in this topic include:

分散メモリキャッシュDistributed Memory Cache

分散メモリキャッシュ ( AddDistributedMemoryCache ) は、 IDistributedCache 項目をメモリに格納するのフレームワーク提供の実装です。The Distributed Memory Cache (AddDistributedMemoryCache) is a framework-provided implementation of IDistributedCache that stores items in memory. 分散メモリキャッシュは実際の分散キャッシュではありません。The Distributed Memory Cache isn't an actual distributed cache. キャッシュされた項目は、アプリが実行されているサーバー上のアプリインスタンスによって格納されます。Cached items are stored by the app instance on the server where the app is running.

分散メモリキャッシュは、次のような実装に役立ちます。The Distributed Memory Cache is a useful implementation:

  • 開発とテストのシナリオで。In development and testing scenarios.
  • 運用環境で1台のサーバーが使用されていて、メモリの消費量が問題ではない場合。When a single server is used in production and memory consumption isn't an issue. 分散メモリキャッシュを実装すると、キャッシュされたデータストレージが抽象化されます。Implementing the Distributed Memory Cache abstracts cached data storage. これにより、複数のノードまたはフォールトトレランスが必要になった場合に、真の分散キャッシュソリューションを実装できます。It allows for implementing a true distributed caching solution in the future if multiple nodes or fault tolerance become necessary.

このサンプルアプリでは、の開発環境でアプリを実行するときに、分散メモリキャッシュを使用し Startup.ConfigureServices ます。The sample app makes use of the Distributed Memory Cache when the app is run in the Development environment in Startup.ConfigureServices:

services.AddDistributedMemoryCache();

分散 SQL Server キャッシュDistributed SQL Server Cache

分散型 SQL Server キャッシュの実装 ( AddDistributedSqlServerCache ) を使用すると、分散キャッシュで SQL Server データベースをバッキングストアとして使用できます。The Distributed SQL Server Cache implementation (AddDistributedSqlServerCache) allows the distributed cache to use a SQL Server database as its backing store. SQL Server インスタンスに SQL Server キャッシュされた項目テーブルを作成するには、ツールを使用し sql-cache ます。To create a SQL Server cached item table in a SQL Server instance, you can use the sql-cache tool. このツールでは、指定した名前とスキーマを使用してテーブルが作成されます。The tool creates a table with the name and schema that you specify.

コマンドを実行して SQL Server にテーブルを作成し sql-cache create ます。Create a table in SQL Server by running the sql-cache create command. SQL Server インスタンス ()、 Data Source データベース ( Initial Catalog )、スキーマ (など dbo )、テーブル名 (など) を指定し TestCache ます。Provide the SQL Server instance (Data Source), database (Initial Catalog), schema (for example, dbo), and table name (for example, TestCache):

dotnet sql-cache create "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DistCache;Integrated Security=True;" dbo TestCache

ツールが正常に実行されたことを示すメッセージがログに記録されます。A message is logged to indicate that the tool was successful:

Table and index were created successfully.

ツールによって作成されたテーブルには、 sql-cache 次のスキーマがあります。The table created by the sql-cache tool has the following schema:

SqlServer キャッシュテーブル

注意

アプリでは、ではなく、のインスタンスを使用してキャッシュ値を操作する必要があり IDistributedCache SqlServerCache ます。An app should manipulate cache values using an instance of IDistributedCache, not a SqlServerCache.

このサンプルアプリは、 SqlServerCache の開発環境以外で実装されてい Startup.ConfigureServices ます。The sample app implements SqlServerCache in a non-Development environment in Startup.ConfigureServices:

services.AddDistributedSqlServerCache(options =>
{
    options.ConnectionString = 
        _config["DistCache_ConnectionString"];
    options.SchemaName = "dbo";
    options.TableName = "TestCache";
});

注意

ConnectionString通常、(および必要に応じ SchemaNameTableName ) は、ソース管理の外部に格納されます (たとえば、 シークレットマネージャーまたは appsettings に格納され appsettings.json / ます)。ENVIRONMENT} json ファイル)。A ConnectionString (and optionally, SchemaName and TableName) are typically stored outside of source control (for example, stored by the Secret Manager or in appsettings.json/appsettings.{ENVIRONMENT}.json files). 接続文字列には、ソース管理システムから保持する必要がある資格情報を含めることができます。The connection string may contain credentials that should be kept out of source control systems.

分散 Redis CacheDistributed Redis Cache

Redis は、オープンソースのメモリ内データストアであり、多くの場合、分散キャッシュとして使用されます。Redis is an open source in-memory data store, which is often used as a distributed cache. Azure でホストされる ASP.NET Core アプリの Azure Redis Cache を構成し、ローカル開発に Azure Redis Cache を使用することができます。You can configure an Azure Redis Cache for an Azure-hosted ASP.NET Core app, and use an Azure Redis Cache for local development.

アプリは、インスタンス () を使用してキャッシュの実装を構成し RedisCache AddStackExchangeRedisCache ます。An app configures the cache implementation using a RedisCache instance (AddStackExchangeRedisCache).

詳細については、「Azure Cache for Redis」を参照してください。For more information, see Azure Cache for Redis.

ローカル Redis cache に対する別のアプローチについては、 この GitHub の問題 を参照してください。See this GitHub issue for a discussion on alternative approaches to a local Redis cache.

分散 NCache キャッシュDistributed NCache Cache

Ncache は、.NET および .net Core でネイティブに開発されたオープンソースのメモリ内分散キャッシュです。NCache is an open source in-memory distributed cache developed natively in .NET and .NET Core. NCache はローカルに動作し、Azure または他のホスティングプラットフォームで実行される ASP.NET Core アプリの分散キャッシュクラスターとして構成されます。NCache works both locally and configured as a distributed cache cluster for an ASP.NET Core app running in Azure or on other hosting platforms.

NCache をローカルコンピューターにインストールして構成するには、「 ncache はじめに Guide For Windows」を参照してください。To install and configure NCache on your local machine, see NCache Getting Started Guide for Windows.

NCache を構成するには:To configure NCache:

  1. Ncache オープンソース NuGetをインストールします。Install NCache open source NuGet.

  2. Ncconfでキャッシュクラスターを構成します。Configure the cache cluster in client.ncconf.

  3. Startup.ConfigureServices に次のコードを追加します。Add the following code to Startup.ConfigureServices:

    services.AddNCacheDistributedCache(configuration =>    
    {        
        configuration.CacheName = "demoClusteredCache";
        configuration.EnableLogs = true;
        configuration.ExceptionsEnabled = true;
    });
    

分散キャッシュを使用するUse the distributed cache

インターフェイスを使用するには IDistributedCache 、アプリの任意のコンストラクターからのインスタンスを要求し IDistributedCache ます。To use the IDistributedCache interface, request an instance of IDistributedCache from any constructor in the app. インスタンスは、 依存関係の挿入 (DI)によって提供されます。The instance is provided by dependency injection (DI).

サンプルアプリが起動すると、 IDistributedCache がに挿入され Startup.Configure ます。When the sample app starts, IDistributedCache is injected into Startup.Configure. 現在の時刻はを使用してキャッシュされ IHostApplicationLifetime ます (詳細については、「 Generic Host: IHostApplicationLifetime」を参照してください)。The current time is cached using IHostApplicationLifetime (for more information, see Generic Host: IHostApplicationLifetime):

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, 
    IHostApplicationLifetime lifetime, IDistributedCache cache)
{
    lifetime.ApplicationStarted.Register(() =>
    {
        var currentTimeUTC = DateTime.UtcNow.ToString();
        byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);
        var options = new DistributedCacheEntryOptions()
            .SetSlidingExpiration(TimeSpan.FromSeconds(20));
        cache.Set("cachedTimeUTC", encodedCurrentTimeUTC, options);
    });

サンプルアプリは IDistributedCacheIndexModel インデックスページで使用するために、に挿入されます。The sample app injects IDistributedCache into the IndexModel for use by the Index page.

インデックスページが読み込まれるたびに、キャッシュがでキャッシュされた時間についてチェックされ OnGetAsync ます。Each time the Index page is loaded, the cache is checked for the cached time in OnGetAsync. キャッシュされた時間が経過していない場合は、時間が表示されます。If the cached time hasn't expired, the time is displayed. キャッシュされた時間が最後にアクセスされてから20秒経過した場合 (このページが最後に読み込まれたとき)、ページにはキャッシュされた 時間 が表示されます。If 20 seconds have elapsed since the last time the cached time was accessed (the last time this page was loaded), the page displays Cached Time Expired .

[キャッシュされた時間の リセット ] ボタンを選択して、キャッシュされた時刻を現在の時刻に直ちに更新します。Immediately update the cached time to the current time by selecting the Reset Cached Time button. このボタンをクリックすると、ハンドラーメソッドがトリガーさ OnPostResetCachedTime れます。The button triggers the OnPostResetCachedTime handler method.

public class IndexModel : PageModel
{
    private readonly IDistributedCache _cache;

    public IndexModel(IDistributedCache cache)
    {
        _cache = cache;
    }

    public string CachedTimeUTC { get; set; }

    public async Task OnGetAsync()
    {
        CachedTimeUTC = "Cached Time Expired";
        var encodedCachedTimeUTC = await _cache.GetAsync("cachedTimeUTC");

        if (encodedCachedTimeUTC != null)
        {
            CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC);
        }
    }

    public async Task<IActionResult> OnPostResetCachedTime()
    {
        var currentTimeUTC = DateTime.UtcNow.ToString();
        byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);
        var options = new DistributedCacheEntryOptions()
            .SetSlidingExpiration(TimeSpan.FromSeconds(20));
        await _cache.SetAsync("cachedTimeUTC", encodedCurrentTimeUTC, options);

        return RedirectToPage();
    }
}

注意

インスタンスに対してシングルトンまたはスコープ設定された有効期間を使用する必要はありません IDistributedCache (少なくとも組み込み実装の場合)。There's no need to use a Singleton or Scoped lifetime for IDistributedCache instances (at least for the built-in implementations).

また、DI を使用する代わりに、必要に応じてインスタンスを作成することもできます IDistributedCache が、コードでインスタンスを作成すると、コードのテストが難しくなり、 明示的な依存関係の原則に違反する可能性があります。You can also create an IDistributedCache instance wherever you might need one instead of using DI, but creating an instance in code can make your code harder to test and violates the Explicit Dependencies Principle.

RecommendationsRecommendations

アプリに最適なの実装を決定する際には、 IDistributedCache 次の点を考慮してください。When deciding which implementation of IDistributedCache is best for your app, consider the following:

  • 既存のインフラストラクチャExisting infrastructure
  • パフォーマンス要件Performance requirements
  • コストCost
  • チームエクスペリエンスTeam experience

キャッシュソリューションは、通常、キャッシュされたデータを高速に取得するためにインメモリストレージに依存しますが、メモリは限られたリソースであり、拡張にはコストがかかります。Caching solutions usually rely on in-memory storage to provide fast retrieval of cached data, but memory is a limited resource and costly to expand. 一般的に使用されるデータのみをキャッシュに格納します。Only store commonly used data in a cache.

一般に、Redis cache は、SQL Server キャッシュよりも高いスループットを実現し、待機時間が短くなります。Generally, a Redis cache provides higher throughput and lower latency than a SQL Server cache. ただし、通常、ベンチマークはキャッシュ戦略のパフォーマンス特性を判断するために必要です。However, benchmarking is usually required to determine the performance characteristics of caching strategies.

SQL Server が分散キャッシュバッキングストアとして使用されている場合、キャッシュに同じデータベースを使用すると、アプリの通常のデータストレージと取得が両方のパフォーマンスに悪影響を与える可能性があります。When SQL Server is used as a distributed cache backing store, use of the same database for the cache and the app's ordinary data storage and retrieval can negatively impact the performance of both. 分散キャッシュバッキングストアには専用の SQL Server インスタンスを使用することをお勧めします。We recommend using a dedicated SQL Server instance for the distributed cache backing store.

その他の資料Additional resources

分散キャッシュは、複数のアプリサーバーによって共有されるキャッシュであり、通常、それにアクセスするアプリサーバーに外部サービスとして保持されます。A distributed cache is a cache shared by multiple app servers, typically maintained as an external service to the app servers that access it. 分散キャッシュを使用すると、特にアプリがクラウドサービスまたはサーバーファームでホストされている場合に、ASP.NET Core アプリのパフォーマンスとスケーラビリティを向上させることができます。A distributed cache can improve the performance and scalability of an ASP.NET Core app, especially when the app is hosted by a cloud service or a server farm.

分散キャッシュには、キャッシュされたデータが個々のアプリサーバーに格納される他のキャッシュシナリオよりも、いくつかの利点があります。A distributed cache has several advantages over other caching scenarios where cached data is stored on individual app servers.

キャッシュされたデータが分散されると、データは次のようになります。When cached data is distributed, the data:

  • は、複数のサーバーに対する複数の要求にわたっ て一貫し ています。Is coherent (consistent) across requests to multiple servers.
  • サーバーの再起動とアプリのデプロイが行われます。Survives server restarts and app deployments.
  • はローカルメモリを使用しません。Doesn't use local memory.

分散キャッシュの構成は実装固有です。Distributed cache configuration is implementation specific. この記事では、SQL Server と Redis の分散キャッシュを構成する方法について説明します。This article describes how to configure SQL Server and Redis distributed caches. Ncache (GitHub の ncache) などのサードパーティの実装も利用できます。Third party implementations are also available, such as NCache (NCache on GitHub). どの実装が選択されているかにかかわらず、アプリはインターフェイスを使用してキャッシュと対話し IDistributedCache ます。Regardless of which implementation is selected, the app interacts with the cache using the IDistributedCache interface.

サンプル コードを表示またはダウンロードします (ダウンロード方法)。View or download sample code (how to download)

必須コンポーネントPrerequisites

SQL Server 分散キャッシュを使用するには、 メタパッケージ を参照するか、AspNetCore パッケージへのパッケージ 参照を追加します。To use a SQL Server distributed cache, reference the Microsoft.AspNetCore.App metapackage or add a package reference to the Microsoft.Extensions.Caching.SqlServer package.

Redis 分散キャッシュを使用するには、 AspNetCore メタパッケージ を参照し、 StackExchangeRedis パッケージへのパッケージ参照を追加します。To use a Redis distributed cache, reference the Microsoft.AspNetCore.App metapackage and add a package reference to the Microsoft.Extensions.Caching.StackExchangeRedis package. Redis パッケージはパッケージに含まれていない Microsoft.AspNetCore.App ため、プロジェクトファイルで redis パッケージを個別に参照する必要があります。The Redis package isn't included in the Microsoft.AspNetCore.App package, so you must reference the Redis package separately in your project file.

NCache 分散キャッシュを使用するには、 AspNetCore メタパッケージ を参照し、パッケージ参照を ncache.. opensource パッケージに追加します。To use NCache distributed cache, reference the Microsoft.AspNetCore.App metapackage and add a package reference to the NCache.Microsoft.Extensions.Caching.OpenSource package. NCache パッケージはパッケージに含まれていない Microsoft.AspNetCore.App ため、プロジェクトファイル内で個別に NCache パッケージを参照する必要があります。The NCache package isn't included in the Microsoft.AspNetCore.App package, so you must reference the NCache package separately in your project file.

IDistributedCache インターフェイスIDistributedCache interface

インターフェイスには、 IDistributedCache 分散キャッシュ実装の項目を操作するための次のメソッドが用意されています。The IDistributedCache interface provides the following methods to manipulate items in the distributed cache implementation:

  • Get, GetAsync : 文字列キーを受け取り、 byte[] キャッシュ内に存在する場合は、キャッシュされた項目を配列として取得します。Get, GetAsync: Accepts a string key and retrieves a cached item as a byte[] array if found in the cache.
  • SetSetAsync : 文字列キーを使用して、キャッシュに項目 (配列として byte[] ) を追加します。Set, SetAsync: Adds an item (as byte[] array) to the cache using a string key.
  • Refresh: は、 RefreshAsync キーに基づいてキャッシュ内の項目を更新し、スライド式有効期限タイムアウト (存在する場合) をリセットします。Refresh, RefreshAsync: Refreshes an item in the cache based on its key, resetting its sliding expiration timeout (if any).
  • RemoveRemoveAsync : 文字列キーに基づいてキャッシュ項目を削除します。Remove, RemoveAsync: Removes a cache item based on its string key.

分散キャッシュサービスを確立するEstablish distributed caching services

のの実装を IDistributedCache に登録 Startup.ConfigureServices します。Register an implementation of IDistributedCache in Startup.ConfigureServices. このトピックで説明するフレームワークに用意されている実装は次のとおりです。Framework-provided implementations described in this topic include:

分散メモリキャッシュDistributed Memory Cache

分散メモリキャッシュ ( AddDistributedMemoryCache ) は、 IDistributedCache 項目をメモリに格納するのフレームワーク提供の実装です。The Distributed Memory Cache (AddDistributedMemoryCache) is a framework-provided implementation of IDistributedCache that stores items in memory. 分散メモリキャッシュは実際の分散キャッシュではありません。The Distributed Memory Cache isn't an actual distributed cache. キャッシュされた項目は、アプリが実行されているサーバー上のアプリインスタンスによって格納されます。Cached items are stored by the app instance on the server where the app is running.

分散メモリキャッシュは、次のような実装に役立ちます。The Distributed Memory Cache is a useful implementation:

  • 開発とテストのシナリオで。In development and testing scenarios.
  • 運用環境で1台のサーバーが使用されていて、メモリの消費量が問題ではない場合。When a single server is used in production and memory consumption isn't an issue. 分散メモリキャッシュを実装すると、キャッシュされたデータストレージが抽象化されます。Implementing the Distributed Memory Cache abstracts cached data storage. これにより、複数のノードまたはフォールトトレランスが必要になった場合に、真の分散キャッシュソリューションを実装できます。It allows for implementing a true distributed caching solution in the future if multiple nodes or fault tolerance become necessary.

このサンプルアプリでは、の開発環境でアプリを実行するときに、分散メモリキャッシュを使用し Startup.ConfigureServices ます。The sample app makes use of the Distributed Memory Cache when the app is run in the Development environment in Startup.ConfigureServices:

services.AddDistributedMemoryCache();

分散 SQL Server キャッシュDistributed SQL Server Cache

分散型 SQL Server キャッシュの実装 ( AddDistributedSqlServerCache ) を使用すると、分散キャッシュで SQL Server データベースをバッキングストアとして使用できます。The Distributed SQL Server Cache implementation (AddDistributedSqlServerCache) allows the distributed cache to use a SQL Server database as its backing store. SQL Server インスタンスに SQL Server キャッシュされた項目テーブルを作成するには、ツールを使用し sql-cache ます。To create a SQL Server cached item table in a SQL Server instance, you can use the sql-cache tool. このツールでは、指定した名前とスキーマを使用してテーブルが作成されます。The tool creates a table with the name and schema that you specify.

コマンドを実行して SQL Server にテーブルを作成し sql-cache create ます。Create a table in SQL Server by running the sql-cache create command. SQL Server インスタンス ()、 Data Source データベース ( Initial Catalog )、スキーマ (など dbo )、テーブル名 (など) を指定し TestCache ます。Provide the SQL Server instance (Data Source), database (Initial Catalog), schema (for example, dbo), and table name (for example, TestCache):

dotnet sql-cache create "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DistCache;Integrated Security=True;" dbo TestCache

ツールが正常に実行されたことを示すメッセージがログに記録されます。A message is logged to indicate that the tool was successful:

Table and index were created successfully.

ツールによって作成されたテーブルには、 sql-cache 次のスキーマがあります。The table created by the sql-cache tool has the following schema:

SqlServer キャッシュテーブル

注意

アプリでは、ではなく、のインスタンスを使用してキャッシュ値を操作する必要があり IDistributedCache SqlServerCache ます。An app should manipulate cache values using an instance of IDistributedCache, not a SqlServerCache.

このサンプルアプリは、 SqlServerCache の開発環境以外で実装されてい Startup.ConfigureServices ます。The sample app implements SqlServerCache in a non-Development environment in Startup.ConfigureServices:

services.AddDistributedSqlServerCache(options =>
{
    options.ConnectionString = 
        _config["DistCache_ConnectionString"];
    options.SchemaName = "dbo";
    options.TableName = "TestCache";
});

注意

ConnectionString通常、(および必要に応じ SchemaNameTableName ) は、ソース管理の外部に格納されます (たとえば、 シークレットマネージャーまたは appsettings に格納され appsettings.json / ます)。ENVIRONMENT} json ファイル)。A ConnectionString (and optionally, SchemaName and TableName) are typically stored outside of source control (for example, stored by the Secret Manager or in appsettings.json/appsettings.{ENVIRONMENT}.json files). 接続文字列には、ソース管理システムから保持する必要がある資格情報を含めることができます。The connection string may contain credentials that should be kept out of source control systems.

分散 Redis CacheDistributed Redis Cache

Redis は、オープンソースのメモリ内データストアであり、多くの場合、分散キャッシュとして使用されます。Redis is an open source in-memory data store, which is often used as a distributed cache. Redis はローカルで使用でき、Azure でホストされる ASP.NET Core アプリの Azure Redis Cache を構成できます。You can use Redis locally, and you can configure an Azure Redis Cache for an Azure-hosted ASP.NET Core app.

アプリでは、 RedisCache の開発以外の環境でインスタンス () を使用して、キャッシュの実装を構成し AddStackExchangeRedisCache Startup.ConfigureServices ます。An app configures the cache implementation using a RedisCache instance (AddStackExchangeRedisCache) in a non-Development environment in Startup.ConfigureServices:

services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = "localhost";
    options.InstanceName = "SampleInstance";
});

Redis をローカルコンピューターにインストールするには、次のようにします。To install Redis on your local machine:

  1. Chocolatey Redis パッケージをインストールします。Install the Chocolatey Redis package.
  2. redis-serverコマンドプロンプトからを実行します。Run redis-server from a command prompt.

分散 NCache キャッシュDistributed NCache Cache

Ncache は、.NET および .net Core でネイティブに開発されたオープンソースのメモリ内分散キャッシュです。NCache is an open source in-memory distributed cache developed natively in .NET and .NET Core. NCache はローカルに動作し、Azure または他のホスティングプラットフォームで実行される ASP.NET Core アプリの分散キャッシュクラスターとして構成されます。NCache works both locally and configured as a distributed cache cluster for an ASP.NET Core app running in Azure or on other hosting platforms.

NCache をローカルコンピューターにインストールして構成するには、「 ncache はじめに Guide For Windows」を参照してください。To install and configure NCache on your local machine, see NCache Getting Started Guide for Windows.

NCache を構成するには:To configure NCache:

  1. Ncache オープンソース NuGetをインストールします。Install NCache open source NuGet.

  2. Ncconfでキャッシュクラスターを構成します。Configure the cache cluster in client.ncconf.

  3. Startup.ConfigureServices に次のコードを追加します。Add the following code to Startup.ConfigureServices:

    services.AddNCacheDistributedCache(configuration =>    
    {        
        configuration.CacheName = "demoClusteredCache";
        configuration.EnableLogs = true;
        configuration.ExceptionsEnabled = true;
    });
    

分散キャッシュを使用するUse the distributed cache

インターフェイスを使用するには IDistributedCache 、アプリの任意のコンストラクターからのインスタンスを要求し IDistributedCache ます。To use the IDistributedCache interface, request an instance of IDistributedCache from any constructor in the app. インスタンスは、 依存関係の挿入 (DI)によって提供されます。The instance is provided by dependency injection (DI).

サンプルアプリが起動すると、 IDistributedCache がに挿入され Startup.Configure ます。When the sample app starts, IDistributedCache is injected into Startup.Configure. 現在の時刻はを使用してキャッシュされ IApplicationLifetime ます (詳細については、「 Web Host: IApplicationLifetime インターフェイス」を参照してください)。The current time is cached using IApplicationLifetime (for more information, see Web Host: IApplicationLifetime interface):

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
    IApplicationLifetime lifetime, IDistributedCache cache)
{
    lifetime.ApplicationStarted.Register(() =>
    {
        var currentTimeUTC = DateTime.UtcNow.ToString();
        byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);
        var options = new DistributedCacheEntryOptions()
            .SetSlidingExpiration(TimeSpan.FromSeconds(20));
        cache.Set("cachedTimeUTC", encodedCurrentTimeUTC, options);
    });

サンプルアプリは IDistributedCacheIndexModel インデックスページで使用するために、に挿入されます。The sample app injects IDistributedCache into the IndexModel for use by the Index page.

インデックスページが読み込まれるたびに、キャッシュがでキャッシュされた時間についてチェックされ OnGetAsync ます。Each time the Index page is loaded, the cache is checked for the cached time in OnGetAsync. キャッシュされた時間が経過していない場合は、時間が表示されます。If the cached time hasn't expired, the time is displayed. キャッシュされた時間が最後にアクセスされてから20秒経過した場合 (このページが最後に読み込まれたとき)、ページにはキャッシュされた 時間 が表示されます。If 20 seconds have elapsed since the last time the cached time was accessed (the last time this page was loaded), the page displays Cached Time Expired .

[キャッシュされた時間の リセット ] ボタンを選択して、キャッシュされた時刻を現在の時刻に直ちに更新します。Immediately update the cached time to the current time by selecting the Reset Cached Time button. このボタンをクリックすると、ハンドラーメソッドがトリガーさ OnPostResetCachedTime れます。The button triggers the OnPostResetCachedTime handler method.

public class IndexModel : PageModel
{
    private readonly IDistributedCache _cache;

    public IndexModel(IDistributedCache cache)
    {
        _cache = cache;
    }

    public string CachedTimeUTC { get; set; }

    public async Task OnGetAsync()
    {
        CachedTimeUTC = "Cached Time Expired";
        var encodedCachedTimeUTC = await _cache.GetAsync("cachedTimeUTC");

        if (encodedCachedTimeUTC != null)
        {
            CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC);
        }
    }

    public async Task<IActionResult> OnPostResetCachedTime()
    {
        var currentTimeUTC = DateTime.UtcNow.ToString();
        byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);
        var options = new DistributedCacheEntryOptions()
            .SetSlidingExpiration(TimeSpan.FromSeconds(20));
        await _cache.SetAsync("cachedTimeUTC", encodedCurrentTimeUTC, options);

        return RedirectToPage();
    }
}

注意

インスタンスに対してシングルトンまたはスコープ設定された有効期間を使用する必要はありません IDistributedCache (少なくとも組み込み実装の場合)。There's no need to use a Singleton or Scoped lifetime for IDistributedCache instances (at least for the built-in implementations).

また、DI を使用する代わりに、必要に応じてインスタンスを作成することもできます IDistributedCache が、コードでインスタンスを作成すると、コードのテストが難しくなり、 明示的な依存関係の原則に違反する可能性があります。You can also create an IDistributedCache instance wherever you might need one instead of using DI, but creating an instance in code can make your code harder to test and violates the Explicit Dependencies Principle.

RecommendationsRecommendations

アプリに最適なの実装を決定する際には、 IDistributedCache 次の点を考慮してください。When deciding which implementation of IDistributedCache is best for your app, consider the following:

  • 既存のインフラストラクチャExisting infrastructure
  • パフォーマンス要件Performance requirements
  • コストCost
  • チームエクスペリエンスTeam experience

キャッシュソリューションは、通常、キャッシュされたデータを高速に取得するためにインメモリストレージに依存しますが、メモリは限られたリソースであり、拡張にはコストがかかります。Caching solutions usually rely on in-memory storage to provide fast retrieval of cached data, but memory is a limited resource and costly to expand. 一般的に使用されるデータのみをキャッシュに格納します。Only store commonly used data in a cache.

一般に、Redis cache は、SQL Server キャッシュよりも高いスループットを実現し、待機時間が短くなります。Generally, a Redis cache provides higher throughput and lower latency than a SQL Server cache. ただし、通常、ベンチマークはキャッシュ戦略のパフォーマンス特性を判断するために必要です。However, benchmarking is usually required to determine the performance characteristics of caching strategies.

SQL Server が分散キャッシュバッキングストアとして使用されている場合、キャッシュに同じデータベースを使用すると、アプリの通常のデータストレージと取得が両方のパフォーマンスに悪影響を与える可能性があります。When SQL Server is used as a distributed cache backing store, use of the same database for the cache and the app's ordinary data storage and retrieval can negatively impact the performance of both. 分散キャッシュバッキングストアには専用の SQL Server インスタンスを使用することをお勧めします。We recommend using a dedicated SQL Server instance for the distributed cache backing store.

その他の資料Additional resources

分散キャッシュは、複数のアプリサーバーによって共有されるキャッシュであり、通常、それにアクセスするアプリサーバーに外部サービスとして保持されます。A distributed cache is a cache shared by multiple app servers, typically maintained as an external service to the app servers that access it. 分散キャッシュを使用すると、特にアプリがクラウドサービスまたはサーバーファームでホストされている場合に、ASP.NET Core アプリのパフォーマンスとスケーラビリティを向上させることができます。A distributed cache can improve the performance and scalability of an ASP.NET Core app, especially when the app is hosted by a cloud service or a server farm.

分散キャッシュには、キャッシュされたデータが個々のアプリサーバーに格納される他のキャッシュシナリオよりも、いくつかの利点があります。A distributed cache has several advantages over other caching scenarios where cached data is stored on individual app servers.

キャッシュされたデータが分散されると、データは次のようになります。When cached data is distributed, the data:

  • は、複数のサーバーに対する複数の要求にわたっ て一貫し ています。Is coherent (consistent) across requests to multiple servers.
  • サーバーの再起動とアプリのデプロイが行われます。Survives server restarts and app deployments.
  • はローカルメモリを使用しません。Doesn't use local memory.

分散キャッシュの構成は実装固有です。Distributed cache configuration is implementation specific. この記事では、SQL Server と Redis の分散キャッシュを構成する方法について説明します。This article describes how to configure SQL Server and Redis distributed caches. Ncache (GitHub の ncache) などのサードパーティの実装も利用できます。Third party implementations are also available, such as NCache (NCache on GitHub). どの実装が選択されているかにかかわらず、アプリはインターフェイスを使用してキャッシュと対話し IDistributedCache ます。Regardless of which implementation is selected, the app interacts with the cache using the IDistributedCache interface.

サンプル コードを表示またはダウンロードします (ダウンロード方法)。View or download sample code (how to download)

必須コンポーネントPrerequisites

SQL Server 分散キャッシュを使用するには、 メタパッケージ を参照するか、AspNetCore パッケージへのパッケージ 参照を追加します。To use a SQL Server distributed cache, reference the Microsoft.AspNetCore.App metapackage or add a package reference to the Microsoft.Extensions.Caching.SqlServer package.

Redis 分散キャッシュを使用するには、 AspNetCore メタパッケージ を参照し て、パッケージ 参照をパッケージに追加します。To use a Redis distributed cache, reference the Microsoft.AspNetCore.App metapackage and add a package reference to the Microsoft.Extensions.Caching.Redis package. Redis パッケージはパッケージに含まれていない Microsoft.AspNetCore.App ため、プロジェクトファイルで redis パッケージを個別に参照する必要があります。The Redis package isn't included in the Microsoft.AspNetCore.App package, so you must reference the Redis package separately in your project file.

NCache 分散キャッシュを使用するには、 AspNetCore メタパッケージ を参照し、パッケージ参照を ncache.. opensource パッケージに追加します。To use NCache distributed cache, reference the Microsoft.AspNetCore.App metapackage and add a package reference to the NCache.Microsoft.Extensions.Caching.OpenSource package. NCache パッケージはパッケージに含まれていない Microsoft.AspNetCore.App ため、プロジェクトファイル内で個別に NCache パッケージを参照する必要があります。The NCache package isn't included in the Microsoft.AspNetCore.App package, so you must reference the NCache package separately in your project file.

IDistributedCache インターフェイスIDistributedCache interface

インターフェイスには、 IDistributedCache 分散キャッシュ実装の項目を操作するための次のメソッドが用意されています。The IDistributedCache interface provides the following methods to manipulate items in the distributed cache implementation:

  • Get, GetAsync : 文字列キーを受け取り、 byte[] キャッシュ内に存在する場合は、キャッシュされた項目を配列として取得します。Get, GetAsync: Accepts a string key and retrieves a cached item as a byte[] array if found in the cache.
  • SetSetAsync : 文字列キーを使用して、キャッシュに項目 (配列として byte[] ) を追加します。Set, SetAsync: Adds an item (as byte[] array) to the cache using a string key.
  • Refresh: は、 RefreshAsync キーに基づいてキャッシュ内の項目を更新し、スライド式有効期限タイムアウト (存在する場合) をリセットします。Refresh, RefreshAsync: Refreshes an item in the cache based on its key, resetting its sliding expiration timeout (if any).
  • RemoveRemoveAsync : 文字列キーに基づいてキャッシュ項目を削除します。Remove, RemoveAsync: Removes a cache item based on its string key.

分散キャッシュサービスを確立するEstablish distributed caching services

のの実装を IDistributedCache に登録 Startup.ConfigureServices します。Register an implementation of IDistributedCache in Startup.ConfigureServices. このトピックで説明するフレームワークに用意されている実装は次のとおりです。Framework-provided implementations described in this topic include:

分散メモリキャッシュDistributed Memory Cache

分散メモリキャッシュ ( AddDistributedMemoryCache ) は、 IDistributedCache 項目をメモリに格納するのフレームワーク提供の実装です。The Distributed Memory Cache (AddDistributedMemoryCache) is a framework-provided implementation of IDistributedCache that stores items in memory. 分散メモリキャッシュは実際の分散キャッシュではありません。The Distributed Memory Cache isn't an actual distributed cache. キャッシュされた項目は、アプリが実行されているサーバー上のアプリインスタンスによって格納されます。Cached items are stored by the app instance on the server where the app is running.

分散メモリキャッシュは、次のような実装に役立ちます。The Distributed Memory Cache is a useful implementation:

  • 開発とテストのシナリオで。In development and testing scenarios.
  • 運用環境で1台のサーバーが使用されていて、メモリの消費量が問題ではない場合。When a single server is used in production and memory consumption isn't an issue. 分散メモリキャッシュを実装すると、キャッシュされたデータストレージが抽象化されます。Implementing the Distributed Memory Cache abstracts cached data storage. これにより、複数のノードまたはフォールトトレランスが必要になった場合に、真の分散キャッシュソリューションを実装できます。It allows for implementing a true distributed caching solution in the future if multiple nodes or fault tolerance become necessary.

このサンプルアプリでは、の開発環境でアプリを実行するときに、分散メモリキャッシュを使用し Startup.ConfigureServices ます。The sample app makes use of the Distributed Memory Cache when the app is run in the Development environment in Startup.ConfigureServices:

services.AddDistributedMemoryCache();

分散 SQL Server キャッシュDistributed SQL Server Cache

分散型 SQL Server キャッシュの実装 ( AddDistributedSqlServerCache ) を使用すると、分散キャッシュで SQL Server データベースをバッキングストアとして使用できます。The Distributed SQL Server Cache implementation (AddDistributedSqlServerCache) allows the distributed cache to use a SQL Server database as its backing store. SQL Server インスタンスに SQL Server キャッシュされた項目テーブルを作成するには、ツールを使用し sql-cache ます。To create a SQL Server cached item table in a SQL Server instance, you can use the sql-cache tool. このツールでは、指定した名前とスキーマを使用してテーブルが作成されます。The tool creates a table with the name and schema that you specify.

コマンドを実行して SQL Server にテーブルを作成し sql-cache create ます。Create a table in SQL Server by running the sql-cache create command. SQL Server インスタンス ()、 Data Source データベース ( Initial Catalog )、スキーマ (など dbo )、テーブル名 (など) を指定し TestCache ます。Provide the SQL Server instance (Data Source), database (Initial Catalog), schema (for example, dbo), and table name (for example, TestCache):

dotnet sql-cache create "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DistCache;Integrated Security=True;" dbo TestCache

ツールが正常に実行されたことを示すメッセージがログに記録されます。A message is logged to indicate that the tool was successful:

Table and index were created successfully.

ツールによって作成されたテーブルには、 sql-cache 次のスキーマがあります。The table created by the sql-cache tool has the following schema:

SqlServer キャッシュテーブル

注意

アプリでは、ではなく、のインスタンスを使用してキャッシュ値を操作する必要があり IDistributedCache SqlServerCache ます。An app should manipulate cache values using an instance of IDistributedCache, not a SqlServerCache.

このサンプルアプリは、 SqlServerCache の開発環境以外で実装されてい Startup.ConfigureServices ます。The sample app implements SqlServerCache in a non-Development environment in Startup.ConfigureServices:

services.AddDistributedSqlServerCache(options =>
{
    options.ConnectionString = 
        _config["DistCache_ConnectionString"];
    options.SchemaName = "dbo";
    options.TableName = "TestCache";
});

注意

ConnectionString通常、(および必要に応じ SchemaNameTableName ) は、ソース管理の外部に格納されます (たとえば、 シークレットマネージャーまたは appsettings に格納され appsettings.json / ます)。ENVIRONMENT} json ファイル)。A ConnectionString (and optionally, SchemaName and TableName) are typically stored outside of source control (for example, stored by the Secret Manager or in appsettings.json/appsettings.{ENVIRONMENT}.json files). 接続文字列には、ソース管理システムから保持する必要がある資格情報を含めることができます。The connection string may contain credentials that should be kept out of source control systems.

分散 Redis CacheDistributed Redis Cache

Redis は、オープンソースのメモリ内データストアであり、多くの場合、分散キャッシュとして使用されます。Redis is an open source in-memory data store, which is often used as a distributed cache. Redis はローカルで使用でき、Azure でホストされる ASP.NET Core アプリの Azure Redis Cache を構成できます。You can use Redis locally, and you can configure an Azure Redis Cache for an Azure-hosted ASP.NET Core app.

アプリは、インスタンス () を使用してキャッシュの実装を構成し RedisCache AddDistributedRedisCache ます。An app configures the cache implementation using a RedisCache instance (AddDistributedRedisCache):

services.AddDistributedRedisCache(options =>
{
    options.Configuration = "localhost";
    options.InstanceName = "SampleInstance";
});

Redis をローカルコンピューターにインストールするには、次のようにします。To install Redis on your local machine:

  1. Chocolatey Redis パッケージをインストールします。Install the Chocolatey Redis package.
  2. redis-serverコマンドプロンプトからを実行します。Run redis-server from a command prompt.

分散 NCache キャッシュDistributed NCache Cache

Ncache は、.NET および .net Core でネイティブに開発されたオープンソースのメモリ内分散キャッシュです。NCache is an open source in-memory distributed cache developed natively in .NET and .NET Core. NCache はローカルに動作し、Azure または他のホスティングプラットフォームで実行される ASP.NET Core アプリの分散キャッシュクラスターとして構成されます。NCache works both locally and configured as a distributed cache cluster for an ASP.NET Core app running in Azure or on other hosting platforms.

NCache をローカルコンピューターにインストールして構成するには、「 ncache はじめに Guide For Windows」を参照してください。To install and configure NCache on your local machine, see NCache Getting Started Guide for Windows.

NCache を構成するには:To configure NCache:

  1. Ncache オープンソース NuGetをインストールします。Install NCache open source NuGet.

  2. Ncconfでキャッシュクラスターを構成します。Configure the cache cluster in client.ncconf.

  3. Startup.ConfigureServices に次のコードを追加します。Add the following code to Startup.ConfigureServices:

    services.AddNCacheDistributedCache(configuration =>    
    {        
        configuration.CacheName = "demoClusteredCache";
        configuration.EnableLogs = true;
        configuration.ExceptionsEnabled = true;
    });
    

分散キャッシュを使用するUse the distributed cache

インターフェイスを使用するには IDistributedCache 、アプリの任意のコンストラクターからのインスタンスを要求し IDistributedCache ます。To use the IDistributedCache interface, request an instance of IDistributedCache from any constructor in the app. インスタンスは、 依存関係の挿入 (DI)によって提供されます。The instance is provided by dependency injection (DI).

サンプルアプリが起動すると、 IDistributedCache がに挿入され Startup.Configure ます。When the sample app starts, IDistributedCache is injected into Startup.Configure. 現在の時刻はを使用してキャッシュされ IApplicationLifetime ます (詳細については、「 Web Host: IApplicationLifetime インターフェイス」を参照してください)。The current time is cached using IApplicationLifetime (for more information, see Web Host: IApplicationLifetime interface):

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
    IApplicationLifetime lifetime, IDistributedCache cache)
{
    lifetime.ApplicationStarted.Register(() =>
    {
        var currentTimeUTC = DateTime.UtcNow.ToString();
        byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);
        var options = new DistributedCacheEntryOptions()
            .SetSlidingExpiration(TimeSpan.FromSeconds(20));
        cache.Set("cachedTimeUTC", encodedCurrentTimeUTC, options);
    });

サンプルアプリは IDistributedCacheIndexModel インデックスページで使用するために、に挿入されます。The sample app injects IDistributedCache into the IndexModel for use by the Index page.

インデックスページが読み込まれるたびに、キャッシュがでキャッシュされた時間についてチェックされ OnGetAsync ます。Each time the Index page is loaded, the cache is checked for the cached time in OnGetAsync. キャッシュされた時間が経過していない場合は、時間が表示されます。If the cached time hasn't expired, the time is displayed. キャッシュされた時間が最後にアクセスされてから20秒経過した場合 (このページが最後に読み込まれたとき)、ページにはキャッシュされた 時間 が表示されます。If 20 seconds have elapsed since the last time the cached time was accessed (the last time this page was loaded), the page displays Cached Time Expired .

[キャッシュされた時間の リセット ] ボタンを選択して、キャッシュされた時刻を現在の時刻に直ちに更新します。Immediately update the cached time to the current time by selecting the Reset Cached Time button. このボタンをクリックすると、ハンドラーメソッドがトリガーさ OnPostResetCachedTime れます。The button triggers the OnPostResetCachedTime handler method.

public class IndexModel : PageModel
{
    private readonly IDistributedCache _cache;

    public IndexModel(IDistributedCache cache)
    {
        _cache = cache;
    }

    public string CachedTimeUTC { get; set; }

    public async Task OnGetAsync()
    {
        CachedTimeUTC = "Cached Time Expired";
        var encodedCachedTimeUTC = await _cache.GetAsync("cachedTimeUTC");

        if (encodedCachedTimeUTC != null)
        {
            CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC);
        }
    }

    public async Task<IActionResult> OnPostResetCachedTime()
    {
        var currentTimeUTC = DateTime.UtcNow.ToString();
        byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);
        var options = new DistributedCacheEntryOptions()
            .SetSlidingExpiration(TimeSpan.FromSeconds(20));
        await _cache.SetAsync("cachedTimeUTC", encodedCurrentTimeUTC, options);

        return RedirectToPage();
    }
}

注意

インスタンスに対してシングルトンまたはスコープ設定された有効期間を使用する必要はありません IDistributedCache (少なくとも組み込み実装の場合)。There's no need to use a Singleton or Scoped lifetime for IDistributedCache instances (at least for the built-in implementations).

また、DI を使用する代わりに、必要に応じてインスタンスを作成することもできます IDistributedCache が、コードでインスタンスを作成すると、コードのテストが難しくなり、 明示的な依存関係の原則に違反する可能性があります。You can also create an IDistributedCache instance wherever you might need one instead of using DI, but creating an instance in code can make your code harder to test and violates the Explicit Dependencies Principle.

RecommendationsRecommendations

アプリに最適なの実装を決定する際には、 IDistributedCache 次の点を考慮してください。When deciding which implementation of IDistributedCache is best for your app, consider the following:

  • 既存のインフラストラクチャExisting infrastructure
  • パフォーマンス要件Performance requirements
  • コストCost
  • チームエクスペリエンスTeam experience

キャッシュソリューションは、通常、キャッシュされたデータを高速に取得するためにインメモリストレージに依存しますが、メモリは限られたリソースであり、拡張にはコストがかかります。Caching solutions usually rely on in-memory storage to provide fast retrieval of cached data, but memory is a limited resource and costly to expand. 一般的に使用されるデータのみをキャッシュに格納します。Only store commonly used data in a cache.

一般に、Redis cache は、SQL Server キャッシュよりも高いスループットを実現し、待機時間が短くなります。Generally, a Redis cache provides higher throughput and lower latency than a SQL Server cache. ただし、通常、ベンチマークはキャッシュ戦略のパフォーマンス特性を判断するために必要です。However, benchmarking is usually required to determine the performance characteristics of caching strategies.

SQL Server が分散キャッシュバッキングストアとして使用されている場合、キャッシュに同じデータベースを使用すると、アプリの通常のデータストレージと取得が両方のパフォーマンスに悪影響を与える可能性があります。When SQL Server is used as a distributed cache backing store, use of the same database for the cache and the app's ordinary data storage and retrieval can negatively impact the performance of both. 分散キャッシュバッキングストアには専用の SQL Server インスタンスを使用することをお勧めします。We recommend using a dedicated SQL Server instance for the distributed cache backing store.

その他の資料Additional resources