データベース ルックアップを介して文字列キーを長い ID に変換する Java サービスがあります。データベースクエリを減らすために、グアバキャッシュにラップしています。キーから ID へのマッピングは、一度設定すると変更されないため、既存のキーの有効期限を長くすることができます。しかし、誰かがデータベースに入る前にキーのIDを検索する可能性があるというタイミングの問題があります(Guavaではなく私のアプリにあります)。この「不足している」マッピングを長時間キャッシュしたくありません。ただし、欠落している同じキーに対するクエリが殺到するのを避けるために、キャッシュしたいと思います。
私はこの質問を読みました: null 値を処理します ...、そこから 2 つのキャッシュを使用してソリューションをまとめました。「行方不明のキー」キャッシュがありますが、これはより早く期限切れになり、自動ロード機能はありません。最初にこのキャッシュをチェックし、そこに何かが見つかった場合、それは欠落しているキーであることがわかります。それ以外の場合は、「実際の」キャッシュを試して、ExecutionException をキャッチして「欠落」を示し、「欠落しているキー」キャッシュに手動で入力します。特に、マッピングがないときに load メソッドで例外をスローする部分は、かなりぎこちなく感じます。したがって、この種の問題を処理するためのよりエレガントな方法はないのではないかと思います。