期限切れのキーを持つ Java 時間ベースのマップ/キャッシュ [closed] 質問する

期限切れのキーを持つ Java 時間ベースのマップ/キャッシュ [closed] 質問する

指定されたタイムアウト後にエントリを自動的に消去する Java Map または同様の標準データ ストアをご存知の方はいらっしゃいますか? これは、期限切れの古いエントリが自動的に「古くなる」ことを意味します。

私はその機能を自分で実装する方法を知っており、過去に何度か実行したことがあるので、その点に関するアドバイスを求めているのではなく、適切なリファレンス実装への指針を求めています。

弱い参照次のようなソリューションに基づく弱いハッシュマップオプションではありません。キーは非インターン文字列である可能性があり、ガベージ コレクターに依存しない構成可能なタイムアウトが必要なためです。

エキャッシュこれも外部構成ファイルが必要なので、頼りたくないオプションです。コードのみのソリューションを探しています。

ベストアンサー1

はい。Googleコレクション、またはグアバ名前の通り、今はマップメーカーまさにそれが実現できます。

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メソッドの多くは廃止され、新しいキャッシュビルダー:

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);
          }
        });

おすすめ記事