ホームページ  >  記事  >  Java  >  Java で時間ベースの有効期限マップ/キャッシュを実装するにはどうすればよいですか?

Java で時間ベースの有効期限マップ/キャッシュを実装するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-20 13:34:17357ブラウズ

How to Implement a Time-Based Expiring Map/Cache in Java?

期限切れキーを含む Java 時間ベースのマップ/キャッシュ

この質問では、構成可能なタイムアウトに基づいてエントリを自動的に期限切れにする Java 実装を求めます。推奨されるソリューションでは、弱い参照、外部構成ファイル、および手動実装を回避します。

回答

Guava ライブラリは、MapMaker クラスを使用したソリューションを提供します。

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 以降の場合は、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 で時間ベースの有効期限マップ/キャッシュを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。