ASP.NETCoreでメモリ内キャッシュを使用する方法

ASP.NET Coreは、Windows、Linux、またはMacOSで高性能の最新のWebアプリケーションを構築するために使用できる無駄のないモジュラーフレームワークです。従来のASP.NETとは異なり、ASP.NETCoreにはCacheオブジェクトがありません。ただし、ASP.NET Coreは、メモリ内キャッシュ、分散キャッシュ、応答キャッシュなど、いくつかの異なるタイプのキャッシュをサポートしています。

この記事では、頻繁に変更されないデータをメモリ内キャッシュに格納することで、ASP.NETCoreアプリケーションのパフォーマンスとスケーラビリティを向上させる方法について説明します。いつものように、説明した概念を説明するためにコード例を含めます。 

ASP.NETCoreでメモリ内キャッシュを有効にする方法

ASP.NET Coreのメモリ内キャッシュは、依存性注入を使用してアプリケーションに組み込むことができるサービスです。VisualStudioでASP.NETCoreプロジェクトを作成したら、以下のコードスニペットに示すように、クラスのConfigureServicesメソッドでメモリ内キャッシュを有効にできStartupます。

public void ConfigureServices(IServiceCollection services)

{{

    services.AddMvc();

    services.AddMemoryCache();

}

ASP.NET Coreのメモリ内キャッシュを操作するには、IMemoryCacheインターフェイスを使用する必要があります。外観は次のとおりです。 

パブリックインターフェイスIMemoryCache:IDisposable

{{

    bool TryGetValue(object key、out object value);

    ICacheEntry CreateEntry(オブジェクトキー);

    void Remove(object key);

}

あなたは登録することができますIMemoryCacheに ConfigServices使用する方法AddMemoryCache私たちは上記の検討方法を。次に、以下のコードスニペットに示すように、コントローラークラスのコンストラクターにキャッシュオブジェクトを挿入する必要があります。

  プライベートIMemoryCacheキャッシュ。

  public CacheController(IMemoryCache cache)

        {{

            this.cache =キャッシュ;

        }

ASP.NETCoreアプリケーションでインメモリキャッシュのサポートを設定するために必要なのはこれだけです。次のセクションでは、ASP.NETCoreのキャッシュAPIを使用してオブジェクトを格納および取得する方法について説明します。

ASP.NET CoreIMemoryCacheを使用してオブジェクトを保存および取得する方法

IMemoryCacheインターフェイスを使用してオブジェクトを保存するにSet()は、以下のコードスニペットに示すメソッドを使用する必要があります。Set()この例で使用したメソッドのバージョンは、2つのパラメーターを受け入れることに注意してください。最初のパラメータはキーの名前であり、2番目のパラメータは値です。つまり、キーを使用して識別できるキャッシュに格納されるオブジェクトです。

[HttpGet]

        パブリック文字列Get()

        {{

            cache.Set(“ Key”、DateTime.Now.ToString());

            「これはテストメソッドです...」を返します。

        }

キャッシュからアイテムを取得するには、Get()以下に示す方法を利用できます。

  [HttpGet(“ {key}”)]

        パブリック文字列Get(文字列キー)

        {{

            cache.Get(key);を返します。

        }

TryGet()キャッシュオブジェクトのメソッドを使用して、指定したキーがキャッシュに存在するかどうかを確認できます。これは、Getこれを実現する方法を示すメソッドの修正バージョンです。

 [HttpGet]

        パブリック文字列Get()

        {{

            文字列キー;

            文字列obj;

            if(!cache.TryGetValue(key、out obj))

            {{

                obj = DateTime.Now.ToString();

                cache.Set(key、obj);

            }

            objを返します。

        }

GetOrCreate提供されたキーに基づいてキャッシュされたデータを取得するために使用できる、と呼ばれる別のメソッドがあります。キーが存在しない場合、メソッドはキーを作成します。

[HttpGet]

        パブリック文字列Get()

        {{

            cache.GetOrCreate(“ Key”、

                cacheEntry => {

                            DateTime.Now.ToString();を返します。

                         });

        }

このメソッドの非同期バージョンがと呼ばれることに注意してくださいGetOrCreateAsyncCacheController参考までに、クラスの完全なコードリストを次に示します。

システムを使用する;

Microsoft.AspNetCore.Mvcを使用します。

Microsoft.Extensions.Caching.Memoryを使用する;

名前空間InMemoryCaching.Controllers

{{

    [Route(“ api / [controller]”)]

    パブリッククラスCacheController:コントローラー

    {{

        プライベートIMemoryCacheキャッシュ。

        public CacheController(IMemoryCache cache)

        {{

            this.cache =キャッシュ;

        }

        [HttpGet]

        パブリック文字列Get()

        {{

            cache.GetOrCreate(“ Key”、

                cacheEntry => {

                            DateTime.Now.ToString();を返します。

                         });

        }

    }

}

ASP.NETCoreでキャッシュされたデータに有効期限ポリシーを設定する方法

キャッシュされたデータに絶対有効期限ポリシーとスライド有効期限ポリシーを設定できることに注意してください。前者はオブジェクトがキャッシュに存在する期間を指定するために使用されますが、後者はアクティビティがない場合にオブジェクトがキャッシュに存在する期間を指定するために使用されます。つまり、アイテムはから削除されます。指定された非アクティブ期間が経過したときのキャッシュ。

有効期限ポリシーを設定するには、MemoryCacheEntryOptions以下のコードスニペットに示すようにクラスを使用します。

MemoryCacheEntryOptions cacheExpirationOptions = new MemoryCacheEntryOptions();

cacheExpirationOptions.AbsoluteExpiration = DateTime.Now.AddMinutes(30);

cacheExpirationOptions.Priority = CacheItemPriority.Normal;

cache.Set(“ Key”、DateTime.Now.ToString()、cacheExpirationOptions);

 上記のコードスニペットのインスタンスでのPriorityプロパティの使用法に注意してくださいMemoryCacheEntryOptions。このPriorityプロパティは、Webサーバーのメモリスペースが不足するたびにメモリを再利用するランタイムの戦略の一部として、(すでに設定されている優先度に基づいて)どのオブジェクトをキャッシュから削除するかを指定します。

優先順位を設定するために、CacheItemPriority列挙型を使用しました。これには、Low、Normal、High、NeverRemoveのいずれかの値を指定できます。ASP.NET Coreのインメモリキャッシュプロバイダーは、キャッシュの優先度をに設定していない限り、メモリ不足の場合にキャッシュエントリを削除しますCacheItemPriority.NeverRemove

アイテムがキャッシュから削除されるたびに実行されるコールバックを登録することもできます。次のコードスニペットは、これを実現する方法を示しています。

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler、this);

キャッシュされたオブジェクト間の依存関係を設定することもできます。たとえば、関連するアイテムが削除されている場合は、特定のアイテムをキャッシュから削除することをお勧めします。これについては、ASP.NET Coreでのキャッシュのその他の多くの機能について、今後の投稿で詳しく説明します。それまでは、MicrosoftのASP.NETCoreドキュメントの関連ページをご覧ください。 

ASP.NETおよびASP.NETCoreでさらに多くのことを行う方法:

  • ASP.NETCoreでメモリ内キャッシュを使用する方法
  • ASP.NET WebAPIでエラーを処理する方法
  • 複数のパラメーターをWebAPIコントローラーメソッドに渡す方法
  • ASP.NET WebAPIで要求と応答のメタデータをログに記録する方法
  • ASP.NETでHttpModuleを操作する方法
  • ASP.NET Core WebAPIの高度なバージョン管理
  • ASP.NETCoreで依存性注入を使用する方法
  • ASP.NETでセッションを操作する方法
  • ASP.NETでHTTPHandlerを操作する方法
  • ASP.NETCoreでIHostedServiceを使用する方法
  • ASP.NETCoreでWCFSOAPサービスを利用する方法
  • ASP.NETCoreアプリケーションのパフォーマンスを向上させる方法
  • RestSharpを使用してASP.NETCore WebAPIを使用する方法
  • ASP.NETCoreでのログインの操作方法
  • ASP.NETCoreでMediatRを使用する方法
  • ASP.NETCoreでセッション状態を操作する方法
  • ASP.NETCoreでナンシーを使用する方法
  • ASP.NET WebAPIのパラメーターバインディングを理解する
  • ASP.NET CoreMVCでファイルをアップロードする方法
  • ASP.NET Core WebAPIでグローバル例外処理を実装する方法
  • ASP.NETCoreでヘルスチェックを実装する方法
  • ASP.NETでのキャッシュのベストプラクティス
  • .NETでApacheKafkaメッセージングを使用する方法
  • WebAPIでCORSを有効にする方法
  • WebClientとHttpClientとHttpWebRequestをいつ使用するか
  • .NETでRedisキャッシュを操作する方法
  • .NETでTask.WaitAllとTask.WhenAllを使用する場合