2017-02-01 17 views
0

我设置了我的缓存这样的:条件expireAfterAccess

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

class MyClass { 
    String name 
    boolean canExpire 
} 

我想canExpire = true的情况下被regurarly过期,但那些false没有。

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

回答

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);