1

MVC3アプリケーションでSystem.Runtime.CachingMemoryCacheを使用して、ほとんど変更されていないが、頻繁にアクセスされるデータをキャッシュしています。30分のabsoluteExpirationを設定しました。これはうまくいきます。30分ごとに、アプリケーションはキャッシュ内のデータを期限切れにし、データを削除します。

次にデータが照会されると、システムはデータベースからキャッシュを再ロードします。

ただし、キャッシュが削除された後、データベースが一時的に使用できなくなった場合はどうなりますか?これにより、MemoryCacheまたはデータベースから利用できるレコードがなくなります。キャッシュを期限切れにするのが理想的ですが、リロードできることが確実になるまでデータを削除しないでください。データベースからデータをリロードできない場合は、キャッシュの有効期限をたとえば5分ほど延長して、再試行してもらいます。最終的に、データベースが復活します。

戦略は、データがまったくないよりも、データが少し古くなっているほうがよいということです。

私の質問は、System.Runtime.Cachingを使用してこのようなキャッシュ戦略を作成するにはどうすればよいかということです。有効期限が切れたときに立ち退きを防ぐことができるイベントは見当たりません。何か案は?

4

1 に答える 1

0

独自のOutputCacheProviderを実装する必要があると思います。これにより、キャッシュからアイテムを削除するときに何が起こるかを正確に制御できます。

http://msdn.microsoft.com/en-us/library/system.web.caching.outputcacheprovider.aspx

また、戦略の変更やSqlCacheDependencyの確認も検討できます。これにより、データベースが利用できない場合にキャッシュされたアイテムが無効になるとは思われません。

http://msdn.microsoft.com/en-us/library/system.web.caching.sqlcachedependency.aspx

于 2012-02-28T08:21:34.687 に答える