私の運用サーバーには、頻繁に使用される SQL Server インスタンスと、ac# Windows サービスであるアプリケーションがあります。私のサービスは、さまざまな時間にさまざまなジョブを実行します。24 時間ごとに、さまざまなジョブの進行状況に関する最新情報を提供する電子メールが送信されます。
このコードは、メモリ キャッシュ内のフラグをチェックして、電子メールを送信するかどうかを決定します。コードは次のようになります。
if (Common.MemCache.Get(Common.MemoryCacheActions.DailyEmail) == null)
{
Common.Logger.Info("Collating email data.");
Common.MemCache.Add(Common.MemoryCacheActions.DailyEmail, String.Empty, DateTime.Now.AddHours(24));
SendEmail();
}
私のメイン ループは約 1 分ごとに null エントリをチェックしているため、大量の電子メールを受信しています。Add が失敗したか、アイテムが削除されたかのように見えますか?
十分なメモリが利用できない場合にアイテムが削除される可能性がある場所を読みました。これが発生した時点で、メンテナンス スクリプトが SQL Server で実行されており、ボックスで使用可能なメモリはほとんどゼロでした。サーバー、chrome、SSMS などで実行していたいくつかのプログラムを閉じたところ、ログ エントリや電子メールがなくなりました。
アイテムの有効期限を明示的に [現在 + 24 時間] に設定しているので、アイテムが 24 時間追加されることを期待しています!
ここでの解決策は何ですか? CacheItemPriority を NotRemoveable に設定し、24 時間後に手動でアイテムを削除する必要がありますか?
キャッシュをどのように使用しているかという点を無効にしますか、または NotRemovable は AbsoluteExpirationDate と連携して機能しますか?