代码之家  ›  专栏  ›  技术社区  ›  hotmeatballsoup

咖啡因或任何JVM缓存API的逐出事件侦听器?

  •  1
  • hotmeatballsoup  · 技术社区  · 6 年前

    这里是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....
        }
    }
    

    咖啡因、番石榴、榛子酱中有类似的东西吗(基本上 JVM缓存区 )等。?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Neil Stevenson    6 年前

    按时间或空间驱逐?

    在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的 期满 事件由系统生成,用户不能直接触发。这个 远离的 事件仅用于用户发起的操作,例如 cache.remove(k) . 另外两种 创建 更新 也帮不上忙。