问题描述
我想像这样创建一个缓存
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();
解决问题。