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

标签 java caching dictionary

你们中有人知道 Java Map 或类似的标准数据存储可以在给定的超时后自动清除条目吗?这意味着老化,即旧的过期条目自动“老化”。

我知道自己实现该功能的方法,并且过去已经做过几次,所以我不是在寻求这方面的建议,而是寻求一个好的引用实现的指针。

WeakReference基于解决方案,如 WeakHashMap不是一个选项,因为我的键可能是非驻留字符串,并且我想要一个不依赖于垃圾收集器的可配置超时。

Ehcache也是我不想依赖的一个选项,因为它需要外部配置文件。我正在寻找仅代码解决方案。

最佳答案

是的。 Google Collection ,或 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(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 基于时间的映射/缓存,带有过期键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61727037/

相关文章:

asp.net - ASP.NET 的缓存管理器

Python函数缓存?

arrays - Swift - 更新嵌套字典中特定项目的值

Python覆盖字典写入文本文件问题

java - 如何强制 CDI/Weld 使用 new 关键字?

java - "How to build a user interface similar to Windows Explorer in Java?"

java - 创建与参数化类型相同类的对象

caching - 如何使用redis缓存更新页面计数器?

java - Android:随机播放变量和多个 setText

javascript - 阿里巴巴面试: print a sentence with min spaces