2017-02-01 8 views
0

に私はそのように私のキャッシュを設定してい:条件付きexpireAfterAccess Googleのキャッシュ

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

class MyClass { 
    String name 
    boolean canExpire 
} 

を私はcanExpire = true持つインスタンスがregurarly期限切れにしたいが、falseないとのそれら。

このような動作を実現する標準的な方法はありますか。

あなたが期限切れにはなりません再置いエントリにスケジュールされたタスクで expireAfterWriteを使用することができます

答えて

0

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