MVC3アプリケーションでSystem.Runtime.CachingMemoryCacheを使用して、ほとんど変更されていないが、頻繁にアクセスされるデータをキャッシュしています。30分のabsoluteExpirationを設定しました。これはうまくいきます。30分ごとに、アプリケーションはキャッシュ内のデータを期限切れにし、データを削除します。
次にデータが照会されると、システムはデータベースからキャッシュを再ロードします。
ただし、キャッシュが削除された後、データベースが一時的に使用できなくなった場合はどうなりますか?これにより、MemoryCacheまたはデータベースから利用できるレコードがなくなります。キャッシュを期限切れにするのが理想的ですが、リロードできることが確実になるまでデータを削除しないでください。データベースからデータをリロードできない場合は、キャッシュの有効期限をたとえば5分ほど延長して、再試行してもらいます。最終的に、データベースが復活します。
戦略は、データがまったくないよりも、データが少し古くなっているほうがよいということです。
私の質問は、System.Runtime.Cachingを使用してこのようなキャッシュ戦略を作成するにはどうすればよいかということです。有効期限が切れたときに立ち退きを防ぐことができるイベントは見当たりません。何か案は?