私のasp.net-mvcサイトで、最もデータベースが重いアクションをキャッシュしたいと思います。私の研究で私は見つけました
しかし、私はまだそれを手に入れたとは感じません。
いくつかのパーに応じて、POSTリクエストをキャッシュできるようにしたい。これらのパーはオブジェクト内にあります。そこで、次のリクエストの結果をキャッシュしたいと思います。
public ActionResult AdvancedSearch(SearchBag searchBag)
SearchBagは、オプションの検索パラメーター(の束)を保持するオブジェクトです。私のビュー自体は(本来あるべき)軽いですが、検索バッグに入力されるフィールドによっては、データアクセスにかなり時間がかかる場合があります。
自分のアクションではなく、データレイヤーにキャッシュする必要があると感じています。
OutputCache属性でVaryByParamを使用するにはどうすればよいですか?
モデルまたはデータレイヤーにもキャッシュするのが好きです。これにより、コントローラー/プレゼンテーションからのデータの取得に関係するすべてが分離されます。 System.Web.HttpContext.Current.Cache
からASP.NETキャッシュにアクセスするか、エンタープライズライブラリのキャッシュアプリケーションブロックを使用できます。クエリのパラメーターからキャッシュされたデータのキーを作成します。データを更新するときは、必ずキャッシュを無効にしてください。
または、HttpContext.Currentから独立して、HttpRuntime.CacheからCacheにアクセスできます:)
多くの場合、OutputCachingは最も高速で効率的ですが、要件を満たしている場合に限ります。それが間違っている場合、高速で効率的であることには意味がありません! ;)
この場合、複雑なキャッシングのニーズがあるため、データレイヤーでのキャッシングは正しいようです。キャッシュする出力を制御するパラメーターのセットが単純な場合、2つを組み合わせることができます。
次のような出力キャッシュを使用できます
[OutputCache(Duration = 10, VaryByParam = "empID")]
public ActionResult GetEmployeeDetail(int empID)
{
Employee e = new Employee();
return Content(e.getEmployeeDetails(empID));
}
または、キャッシュプロファイルを使用して、Web設定で設定できます
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="Admin"
duration="86420" varyByParam="none"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
and use this tag
[OutputCache(CacheProfile="Admin")]