2017-02-01 2 views
0

J'installe mon cache comme ça:expireAfterAccess conditionnelle dans Google cache

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

et

class MyClass { 
    String name 
    boolean canExpire 
} 

Je veux que les cas avec canExpire = true être expiré regurarly, mais ceux qui ont false pas.

Existe-t-il un moyen standard/direct d'obtenir un tel comportement?

Répondre

0

Vous pouvez utiliser expireAfterWrite avec une tâche planifiée pour re-mettre les entrées qui ne devrait pas expirer:

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