[解決済み】Javaの期限付きマップ/キャッシュ【終了しました
2022-03-30 12:13:02
質問
Java Mapやそれに類する標準的なデータストアで、所定のタイムアウト後にエントリを自動的にパージするものをご存知の方はいらっしゃいますか?これは、古い期限切れのエントリーが自動的に「エイジアウト」する、エージングを意味します。
できればMavenでアクセスできるオープンソースライブラリでお願いします。
自分で実装する方法は知っているし、過去に何度かやったことがあるので、その点でのアドバイスではなく、良いリファレンス実装へのポインタを求めています。
ウィークリーリファレンス のようなベースのソリューションがあります。 ウィークハッシュマップ なぜなら、キーが非内部連結文字列である可能性が高く、ガベージコレクタに依存しない設定可能なタイムアウトが必要だからです。
Ehcache も、外部設定ファイルを必要とするため、あまり頼りたくないオプションです。私はコードのみの解決策を探しています。
どのように解決するのですか?
はい。グーグルコレクション、または グアバ という名前のものがあります。 マップメーカー というようなことができます。
ConcurrentMap<Key, Graph> graphs = new MapMaker()
.concurrencyLevel(4)
.softKeys()
.weakValues()
.maximumSize(10000)
.expiration(10, TimeUnit.MINUTES)
.makeComputingMap(
new Function<Key, Graph>() {
public Graph apply(Key key) {
return createExpensiveGraph(key);
}
});
更新しました。
guava 10.0 (2011年9月28日リリース) より、これらの MapMaker メソッドの多くは非推奨となり、新しいメソッドである CacheBuilder :
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.maximumSize(10000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
関連
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] アニメーションGIFの表示
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] Java 8 List<V> を Map<K, V> に変換する。
-
[解決済み] Javaでメソッドの実行時間を計るにはどうしたらいいですか?
-
[解決済み] Java 8のmap()メソッドとflatMap()メソッドの違いは何ですか?
-
[解決済み] JavaでMapをListに変換する方法は?
-
[解決済み] Mapを実装し、挿入順序を保持するJavaクラス?
-
[解決済み] Mapのキーを配列に変換するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javaで拡張子なしのファイル名を取得する方法は?
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] タイプの安全性。アンチェック・キャスト
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました