You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过监听器获取org.apache.cayenne.util.concurrentlinkedhashmap被驱逐值

ConcurrentLinkedHashMap 驱逐条目监听实现方案

你使用的org.apache.cayenne.util.concurrentlinkedhashmap组件原生提供了驱逐监听器回调能力,按以下步骤实现即可获取被自动驱逐的条目:

步骤1:实现驱逐监听器接口

首先自定义类实现EvictionListener<K, V>接口,重写onEviction方法,该方法的入参就是被驱逐条目的key和value,你可以在该方法内实现你的业务处理逻辑:

import org.apache.cayenne.util.concurrentlinkedhashmap.EvictionListener;

public class CacheEvictionListener<K, V> implements EvictionListener<K, V> {
    @Override
    public void onEviction(K evictedKey, V evictedValue) {
        // 示例:打印被驱逐的条目信息,可替换为你的业务逻辑(如持久化、日志上报等)
        System.out.printf("缓存条目被驱逐:key=%s,value=%s%n", evictedKey, evictedValue);
    }
}

步骤2:构建缓存时绑定监听器

在初始化ConcurrentLinkedHashMap实例时,通过Builder的listener方法绑定你实现的监听器即可:

import org.apache.cayenne.util.concurrentlinkedhashmap.ConcurrentLinkedHashMap;

// 初始化缓存
ConcurrentLinkedHashMap<String, Object> bizCache = new ConcurrentLinkedHashMap.Builder<String, Object>()
        .maximumWeightedCapacity(3000) // 你原有配置的缓存容量阈值
        .listener(new CacheEvictionListener<>()) // 绑定自定义驱逐监听器
        .build();

注意事项

  • 只有缓存达到容量上限触发的自动驱逐操作才会调用监听器,手动调用remove()等方法主动删除的条目不会触发该回调。
  • 监听器内部逻辑尽量轻量化,避免长时间阻塞,否则会影响缓存的正常读写性能。
  • 驱逐操作是多线程异步触发时,监听器的业务逻辑需要自行保证线程安全。

内容的提问来源于stack exchange,提问作者Akshay Sakunde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:48:03