2017-02-01 2 views
0

Ich gründe meine Cache wie das oben:Conditional expireAfterAccess im Google Cache

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

und

class MyClass { 
    String name 
    boolean canExpire 
} 

Ich möchte die Instanzen mit canExpire = true regurarly abgelaufen sein, aber die mit false nicht.

Gibt es einen Standard/direkten Weg, um ein solches Verhalten zu erreichen?

Antwort

0

Sie können expireAfterWrite mit einem geplanten Task verwenden, um die Einträge erneut setzen, die nicht ablaufen soll:

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