首页 >Java >java教程 >如何在 Java 中实现基于时间的过期映射/缓存?

如何在 Java 中实现基于时间的过期映射/缓存?

Barbara Streisand
Barbara Streisand原创
2024-11-20 13:34:17451浏览

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中文网其他相关文章!

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