1

我有一个缓存,并且正在将新元素放入其中。每次我将一个项目放入缓存中时,都会触发删除侦听器。如何仅在实际删除或驱逐事物时触发删除侦听器?

Cache<String, String> cache = CacheBuilder.newBuilder()
//      .expireAfterWrite(5, TimeUnit.MINUTES)
    .removalListener((RemovalListener<String, String>) notification -> {
        System.out.println("Why");
    })
    .build();
}

cache.put("a","b"); // triggers removal listener

我在这里错过了什么吗?为什么不叫a PutListener

4

1 回答 1

1

要查找实际原因,应使用RemovalNotification.getCause() 方法。

要处理除 «Replaced entry» 事件通知之外的所有事件通知,请考虑以下实施草案:

class RemovalListenerImpl implements RemovalListener<String, String> {
    @Override
    public void onRemoval(final RemovalNotification<String, String> notification) {
        if (RemovalCause.REPLACED.equals(notification.getCause())) {
            // Ignore the «Entry replaced» event notification.
            return;
        }

        // TODO: Handle the event notification here.
    }
}
于 2017-08-12T21:26:38.400 回答