首页  >  文章  >  Java  >  如何使用 Guava 在 Java 中创建基于时间的过期缓存?

如何使用 Guava 在 Java 中创建基于时间的过期缓存?

Patricia Arquette
Patricia Arquette原创
2024-11-21 07:02:16339浏览

How to Create a Time-Based Expiring Cache in Java using Guava?

带有过期键的 Java 基于时间的映射/缓存

在 Java 中,处理基于时间的缓存可能是一个挑战。密钥可能会在一定时间后过期,因此有必要自动清除这些过期条目。

解决此问题的一种方法是利用 Google Collections(现在称为 Guava)的强大功能。 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);
         }
       });

使用 MapMaker,您可以指定各种参数:

  • concurrencyLevel:控制地图内的并行度。
  • softKeys:表示键应弱保留,以便垃圾收集器在可能的情况下回收它们。
  • weakValues:与 softKey 类似,但用于值。
  • maximumSize:指定映射中的最大条目数。
  • expiration:设置条目的过期持续时间。

Guava 已弃用其中一些 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);
          }
        });

CacheBuilder 提供了更简洁和更新的 API,用于管理 Java 中基于时间的缓存。

以上是如何使用 Guava 在 Java 中创建基于时间的过期缓存?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn