コンピュータ プログラミングにおいて、ネガティブ キャッシュとは、「ネガティブ」な応答、つまり失敗も保存するキャッシュです。つまり、原因が修正された後でも、プログラムは失敗を示す結果を記憶します。通常、ネガティブ キャッシュは設計上の選択ですが、ソフトウェアのバグである可能性もあります。
例
ネットワークが利用できないときにページを読み込もうとするWeb ブラウザについて考えてみましょう。ブラウザは問題を示すエラー コードを受け取り、要求されたページの代わりにこのエラー メッセージをユーザーに表示します。ただし、ブラウザがエラー メッセージをページ キャッシュに配置するのは正しくありません。そうすると、ユーザーが同じページを読み込もうとすると、ネットワークが復旧した後でも、エラーが再度表示されることになります。エラー メッセージは、ページのURLの下にキャッシュしてはなりません。ブラウザがページを正常に読み込めるまで、ユーザーがページを読み込もうとするたびに、ブラウザは新しい試行を行う必要があります。
ネガティブ キャッシュの厄介な点は、ユーザーが問題のトラブルシューティングに多大な労力を費やしても、根本原因を特定して除去した後でもエラーが消えないことです。
失敗のような状態をキャッシュしなければならない場合があります。たとえば、DNS では、キャッシュ ネームサーバーが肯定応答だけでなく否定応答[1]も記憶する必要があります。権威ネームサーバーが名前が存在しないことを示す否定応答を返すと、これがキャッシュされます。否定応答はアプリケーション レベルでは失敗として認識される可能性がありますが、それをキャッシュするネームサーバーにとっては失敗ではありません。否定キャッシュと肯定キャッシュのキャッシュ時間は個別に調整できます。
説明
ネガティブ キャッシュが望まれるのは、通常、失敗のコストが非常に高く、ユーザーの操作なしでエラー状態が自動的に発生する場合のみです。これにより、ユーザーが失敗の原因を特定できない状況が発生します。考えられるすべての修正を行ったにもかかわらず、プログラムが動作を拒否します。失敗がキャッシュされる場合、プログラムは、エラーの原因の説明に加えて、キャッシュをクリアするために何をしなければならないかを明確に示す必要があります。このような状況では、ネガティブ キャッシュは設計アンチパターンの例です。
キャッシュされたレコードの有効期限が切れた場合でも、ネガティブ キャッシュは回復される可能性があります。
参照
参考文献
- ^ RFC 2308
