我正在设置我的缓存:
Cache<String,MyClass> cache = CacheBuilder.newBuilder().expireAfterAccess( 16l, TimeUnit.MINUTES ).build()
和
class MyClass {
String name
boolean canExpire
}
我希望canExpire = true
的实例经常过期,但false
的实例不会过期。
是否有任何标准/直接的方式来实现这种行为?
答案 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);