1. ホーム
  2. java

[解決済み] JavaでLRUキャッシュを実装するとしたら、どのようにしますか?

2022-04-22 17:56:32

質問

EHCacheやOSCacheなどとは言わないでください。この質問では、SDKだけを使って自分で実装したいと仮定します(やりながら学ぶ)。キャッシュをマルチスレッド環境で使用することを考えると、どのデータ構造を使用するでしょうか?私はすでに以下を使用して1つを実装しています。 LinkedHashMap コレクション#synchronizedMap しかし、新しい同時実行コレクションがより良い候補になるかどうか気になるところです。

UPDATE: 私はちょうど読んでいた Yeggeの最新作 と思っていたら、こんなものがありました。

<ブロッククオート

もし定時アクセスが必要で、挿入順序を維持したいのであれば、LinkedHashMap以上のものはないでしょう。LinkedHashMapは本当にすばらしいデータ構造だ。これ以上すばらしいものはないだろう。しかし、残念なことに。

にする前は、ほぼ同じことを考えていました。 LinkedHashMap + Collections#synchronizedMap の実装を紹介しました。私が何かを見落としていなかったことが分かってよかったです。

これまでの回答から、高度な同時実行LRUを実現するための最善の策は ConcurrentHashMap と同じロジックで LinkedHashMap を使用しています。

解決方法は?

もし私が今日また一からこの作業をするとしたら、Guavaの CacheBuilder .