有条件的expireAfterAccess在Google缓存中

时间:2017-02-01 13:40:29

标签: java guava google-guava-cache

我正在设置我的缓存:

Cache<String,MyClass> cache = CacheBuilder.newBuilder().expireAfterAccess( 16l, TimeUnit.MINUTES ).build()

class MyClass {
  String name
  boolean canExpire
}

我希望canExpire = true的实例经常过期,但false的实例不会过期。

是否有任何标准/直接的方式来实现这种行为?

1 个答案:

答案 0 :(得分:0)

您可以将expireAfterWrite与计划任务一起使用,以重新放置不应过期的条目:

Cache<String, MyClass> cache = CacheBuilder.newBuilder()
        .expireAfterAccess(16L, TimeUnit.MINUTES)
        .expireAfterWrite(16L, TimeUnit.MINUTES)
        .build();

ScheduledExecutorService exitingScheduledExecutorService = MoreExecutors
        .getExitingScheduledExecutorService(new ScheduledThreadPoolExecutor(1));
Runnable command = () -> cache.putAll(Maps.filterValues(cache.asMap(), myClass ->
        !myClass.canExpire)));
exitingScheduledExecutorService.scheduleWithFixedDelay(command, 0, 15L, TimeUnit.MINUTES);
相关问题