キャッシュ方法は、何を達成しようとしているかによって異なります。これらのキャッシング方法をすべて使用したわけではありませんが、複数のレイヤーでキャッシングを使用する方法について説明します。
複数のサーバーでホストされている少なくとも 3 つの階層化された Web アプリがあり、ロードバランサーまたはプロキシを介してアクセスするとします。
静的データ、または頻繁に更新する必要のないデータについては、それが提供する System.Runtime.Caching である Dictionary を使用し、単一のサーバーにデータを保存します。サイトのメタデータのように、リクエストごとに必要なアプリケーションの設定があるとします。トリップを保存し、キャッシュしてデータベースにロードしたいと考えています。
ブログのようなものでは、memcached のような分散キャッシュを使用します。すべてのサーバーは、Dictionary 値を格納するためにメモリの一部を共有します。ただし、キャッシュにはデータのインスタンスが 1 つしかないため、どのサーバーでもキャッシュされた項目を変更または削除でき、すべてのサーバーでデータが更新されます。データベース クエリは多くの場合、コストがかかるため、既に処理されたデータをキャッシュに保持しますが、データがいつ変更または削除されるかがわかります。
シンプルな UI 要素には、出力キャッシュを使用します。背後にあるロジックがほとんどない単純なアプリケーションでキャッシュする方法が非常によくあります。データが変更されていると、うまく制御できなかったり、削除したりできません。ナビゲーションの部分ビューをキャッシュするなどの静的要素で使用します。また、トリップをデータベースに保存しますが、データベースの値が変更された場合、ビジネス ロジック レイヤーから再キャッシュすることはできません。
他の方法は必要ありませんでしたが、キャッシングはしばしば非常に重要です。より低いレベルで手動でキャッシュすることをお勧めします。書き込みと使用に時間がかかりますが、はるかに優れた制御が提供されます。
編集: キャッシングを使用する場合は、キャッシュ用のプロキシ クラスを作成することを強くお勧めします。そのため、テストではそれをオフにして、パフォーマンスを消費するコード部分を見つけることができます。