2011-01-10 9 views
2

LinkedHashMapから拡張されたマップを使用してキャッシュを実装しています(removeEldestEntryを実装できます)。古い実装では、定期的なハッシュマップが使用され、設定された間隔でリフレッシュされました。私はどのようにキャッシュのデータを最新に保つことができるのだろうかと思っていた。私はLRUのポイントを台無しにすることなく、特定の時間にちょうどリフレッシュすることができますか?エントリのタイムスタンプをDBに照会するのは特にコストがかかりますか?LRUキャッシュのリフレッシュ

+0

http://download.oracle.com/javase/1.4.2/docs/api/java/util/LinkedHashMap.html#removeEldestEntry%28java.util.Map.Entry%29 EldestEntryは時間ベースではなく_numberベースです。ベース。 LRUでは、最小限の生存時間が必要です。時間に制約があるため、EledestEntryは長さを制限します。サイズの制約です。私は、EldestEntryを使用してLRUをどのように実装する予定ですか? – Nishant

+0

@Nishant、私はLRUが単に取り除かれたものを統治したという印象を受けました。私がサイズの制約にぶつかったとき、私は最も最近使われていなかったオブジェクトを削除したい。 –

+0

LRU - 私が知っているように、最低使用頻度のあるエントリを削除する必要があります。つまり、最も頻繁に要求されていないオブジェクトを削除したいとします。さて、あなたのハッシュマップの大きさ、例えば100と100番目の要素が最も頻繁に使用されています。それを削除したいですか? (1)オブジェクトが追加されたときのタイムスタンプで優先度を決定する優先度キューを使用する(2)LHMを使用するが、get()が呼び出されるたびにエントリを削除してからLRUを模倣する。 – Nishant

答えて

0

私はLinkedHashMapを使って、アクセスタイムとタイムスタンプのためにdbと照合して注文しました。これは魅力的に機能し、アプリケーションのメモリ負荷を大幅に削減しました。

1

なぜ使用しないのですかOS Cache - ホイールを改造することはありません。

+0

その他のキャッシュについては、ほとんどの場合、ライブ設定の時間があります –

+0

これは非常に古いプロジェクトであり、元の開発者が残っていないためです。私は新しい依存関係を追加することを避け、単一のファイルを再配線したいと思います。 –

+0

@Bobnix。おそらく、私はあなたが角を切るべきではないと思っています。 :) –

関連する問題