如何从 org.apache.cayenne.util.concurrentlinkedhashmap 中获取被逐出的值?

How to get evicted value from org.apache.cayenne.util.concurrentlinkedhashmap?

我正在使用 org.apache.cayenne.util.concurrentlinkedhashmap 并通过使用 maximumWeightedCpacity(3000) 方法设置缓存容量,一旦缓存达到其阈值限制,它就会开始驱逐旧条目。我需要那些被驱逐的条目。如何使用侦听器获取这些条目?

这是 ConcurrentLinkedHashMap library. The tutorial 的嵌入副本提供了一个使用 EvictionListener 的示例,可以写成,

ConcurrentMap<K, V> cache = new ConcurrentLinkedHashMap.Builder<K, V>()
    .maximumWeightedCapacity(3_000)
    .listener((key, value) ->
        System.out.printf("Evicted key=%s, value=%s%n", key, value))
    .build();

虽然这个库很小,但它是在 Java 5 时间框架内编写的。对于嵌入式案例来说,最小化 jar 大小仍然非常好,但一般用途应该更喜欢 Caffeine 。该库提供了更丰富的功能集和额外的性能改进。

Cache<K, V> graphs = Caffeine.newBuilder()
    .maximumSize(3_000)
    .removalListener((K key, V value, RemovalCause cause) ->
        System.out.printf("%s: key=%s, value=%s%n", cause, key, value))
    .build();