gpt4 book ai didi

java - Caffeine 或任何 JVM 缓存 API 的驱逐事件监听器?

转载 作者:行者123 更新时间:2023-11-30 02:05:30 25 4
gpt4 key购买 nike

这里是 Java 8。有什么办法可以用Caffeine缓存框架(或任何其他与此相关的 JSR-107 兼容框架)在记录被逐出缓存时收到通知?

也许是某种EvictionEventListener之类的?

public class MyEvictionListener implements EvictionEventListener<String> {
@Override
public void onEvictionEvent(EvictionEvent eviction, String key) {
// Now I have access to the String "key" that was evicted and
// some information surrounding the eviction and I can do
// whatever I want with this information....
}
}

Caffeine、Guava、Hazelcast(基本上是“JVM 缓存区”)等中有类似的东西吗?

最佳答案

按时间驱逐还是按空间驱逐?

在 JSR107 中,您必须获得前者的事件,而不能获得后者的事件。请参阅规范的第 8.4 节“8.4. 监听器的调用”。

所有 JCache 实现都必须支持按时间驱逐,您可以通过 javax.cache.event.CacheEntryExpiredListener<K, V> 了解这一点。根据实现,到期可以是急切的或惰性的,项目不一定会在其时间限制发生时消失。

JCache 允许实现通过基于空间来扩展它。

使用 Hazelcast 你可以做到这一点

 <eviction size="50" max-size-policy="ENTRY_COUNT" eviction-policy="LRU"/>

根据可配置的空间阈值丢弃缓存中的项目。但是,由于这取决于实现,因此没有适用于它的 JCache 事件。

JCache的EXPIRED事件是系统产生的,用户不能直接触发。 REMOVED 事件仅适用于用户启动的操作,例如 cache.remove(k) 。其他两种CREATEDUPDATED在这里也没有帮助。

关于java - Caffeine 或任何 JVM 缓存 API 的驱逐事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51525150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com