2011-12-28 7 views
0

.NETキャッシングブロックを使用して.NET 3.5サービスでデータベースから静的データをキャッシュする方法を検討しています。エンタープライズキャッシングブロックを使用して一度にキャッシュ全体をフラッシュする

私が読んだことのすべてから、FileDependencyはあまりにも頻繁に期限切れにならない静的なデータを格納するための最良の選択肢だと思われます。しかし、ファイルが変更され、キャッシュがフラッシュされると、特定のキャッシュの後処理を行うためにコールバックを1回取得する必要があります。私がICacheItemRefreshActionを実装し、アイテムをキャッシュに追加する際に登録すると、それぞれのコールバックを取得します。

キャッシュ全体のコールバックを登録する方法はありますが、キャッシュがフラッシュされたときに何千ものコールバックが呼び出されることはありませんか? FileDependencyより良い方法のためのあなたのフォローアップに対処するため

おかげ

+0

フォローアップとして、データベースから静的データをキャッシュするためにFileDependencyを使用するよりも良い方法があります。たとえば、私がサポートしているデータベースの国とその通貨コードのリストをキャッシュしたいとします。このデータは、データベースに新しいエントリを手動で挿入しない限り変更されません。変更をトリガーしてキャッシュをフラッシュするために使用できるより良い方法の依存関係はありますか? – mvm

答えて

0

:あなたはICacheItemExpirationでSqlDependencyをラップすることができます。サンプルコードについては、SqlCacheDependency with the Caching Application Blockを参照してください。

このアプローチはSQL Serverでのみ機能し、Service Brokerをセットアップする必要があります。

キャッシュレベルのコールバックに関しては、これを実現するための方法はありません。ほとんどすべてがアイテムレベルに合わせられています。キャッシュレベルのコールバックを備えた独自のCacheManager実装を作成することができます。

もう1つの方法として、キャッシュが空の場合(つまり、最後の項目が削除された場合)にのみ操作を実行するICacheItemRefreshActionを使用することがあります。