1

エビクションポリシーが設定されたexpireAfterWrite()でグアバLoadingCacheを使用しています。また、次を使用してアクセス時にエントリを無効にします。

v = cache.getIfPresent( k );
if( v != null ) {
  cache.invalidate( k );
}

書き込みタイムアウトが発生した後にエントリが自動削除された場合にのみ起動される RemovalListener を追加する方法はありますか? ドキュメントから、エントリが削除されるたびに RemovalListener が呼び出されるようです。

4

2 に答える 2

3

はい、RemovalListenerエントリが削除されるたびに a が呼び出されますが、 はcauseを含むオブジェクトRemovalListenerを受け取ります。これを使用して、エントリが削除された方法を特定できます。RemovalNotification

CacheBuilder.newBuilder()
  .removalListener(new RemovalListener<Foo, Bar>() {
    public void onRemoval(RemovalNotification<Foo, Bar> notification) {
      if (notification.getCause() == RemovalCause.EXPIRED) {
        // we only care about these removals
      }
    }
  })
  .build();
于 2012-11-10T02:11:43.917 に答える
0

主にパフォーマンスを探している場合、これは完璧なソリューションではありません。追い出されたエントリのみを受け取る方法があれば、はるかに優れているはずです。私見では

于 2012-11-28T20:45:39.623 に答える