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

Apache Ignite:如何获取指定缓存的CacheObjectPut与CacheObjectRemoved事件

Ignite指定单缓存事件监听解决方案

你当前使用全局Ignite.GetEvents()监听的方式会接收所有缓存的事件,要过滤仅获取指定缓存的对应事件,有两种实现方式:

方案1(推荐):使用连续查询(Continuous Query)监听目标缓存

该方式在服务端就会完成事件过滤,仅推送目标缓存的事件到客户端,性能更高,是官方推荐的单缓存事件监听方案:

// 全局配置依旧需要开启对应事件,这是事件触发的前置要求
var cfg = new IgniteConfiguration
{
    IncludedEventTypes = new[]
    {
        EventType.CacheObjectPut,
        EventType.CacheObjectRemoved,
    }
};
var ignite = Ignition.Start(cfg);

// 替换为你需要监听的缓存名称
var targetCache = ignite.GetCache<object, object>("你的目标缓存名");

// 配置连续查询,监听缓存变更事件
var continuousQuery = new ContinuousQuery<object, object>(
    new CacheEntryEventListener<object, object>(eventList =>
    {
        foreach (var entryEvent in eventList)
        {
            switch (entryEvent.EventType)
            {
                case CacheEntryEventType.Created:
                case CacheEntryEventType.Updated:
                    // 对应CacheObjectPut事件的处理逻辑
                    Console.WriteLine($"写入事件:键={entryEvent.Key}, 值={entryEvent.Value}");
                    break;
                case CacheEntryEventType.Removed:
                    // 对应CacheObjectRemoved事件的处理逻辑
                    Console.WriteLine($"删除事件:键={entryEvent.Key}");
                    break;
            }
        }
    })
);

// 启动监听
targetCache.QueryContinuous(continuousQuery);

方案2:全局监听增加缓存名过滤

如果你不想改动现有全局监听的代码结构,可以在本地监听器中增加缓存名判断,仅处理目标缓存的事件:
原有全局监听的启动代码不需要修改,只需调整LocalListener的实现:

public class LocalListener : IEventListener<CacheEvent>
{
    // 替换为你需要监听的缓存名称
    private const string TargetCacheName = "你的目标缓存名";

    public bool Invoke(CacheEvent cacheEvent)
    {
        // 非目标缓存的事件直接跳过
        if (cacheEvent.CacheName != TargetCacheName)
        {
            return true;
        }

        // 原有事件处理逻辑
        if (cacheEvent.Type == EventType.CacheObjectPut)
        {
            // 处理写入事件
        }
        else if (cacheEvent.Type == EventType.CacheObjectRemoved)
        {
            // 处理删除事件
        }

        return true;
    }
}

注意:两种方案都需要保证Ignite全局配置的IncludedEventTypes中已经包含了你需要监听的事件类型,否则事件不会被Ignite触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:15:05