在 Java 上使用 Caffeine 在到期时执行操作

问题描述

我想像这样创建一个缓存

Cache<String,File> cache = caffeine.newBuilder()
                .expireAfterWrite(1,TimeUnit.MINUTES)
                .maximumSize(100)
                .build();

我将用这样的临时文件填充,

File f = File.createTempFile("jobid_",".json");
FileWriter fileWriter = new FileWriter(f);
fileWriter.write("text values 123");
fileWriter.close();


cache.put("jobid",f);

现在 1 分钟后我知道 cache.getIfPresent("jobid") 将返回 null,我的问题是有什么方法可以在此条目过期时触发另一个任务 - 删除临时文件本身。

任何替代解决方案也都有效。

解决方法

感谢蓬​​松。

要实现相同的,简单地使用removalListener。

对于我的用例:

Cache<String,File> cache = Caffeine.newBuilder()
    .removalListener((String key,File file,RemovalCause cause) -> {
      file.delete();
    })
    .expireAfterWrite(3,TimeUnit.SECONDS)
    .maximumSize(100)
    .build();

解决问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...