Apache Ignite客户端与服务器Eviction Policy不匹配异常求助
Apache Ignite 客户端缓存驱逐策略不匹配问题解决
问题原因
你遇到的Eviction policy mismatch错误,核心原因是Ignite瘦客户端本身不负责存储缓存数据,它仅作为访问服务端缓存的代理,不需要也不应该配置本地驱逐策略(localEvictionPolicy)。服务端已配置缓存的驱逐策略,客户端试图配置本地驱逐策略时,会因客户端无本地缓存存储能力导致本地策略为null,与服务端策略产生冲突。
另外,瘦客户端的onheapCacheEnabled配置无效,因为瘦客户端不会在本地堆中缓存数据,所有数据操作都转发到服务端节点。
解决方法
方法1:直接复用服务端缓存配置
客户端代码无需显式配置缓存的驱逐策略和堆内缓存,直接获取服务端已创建的缓存即可:
// 初始化客户端连接后,直接获取服务端的myCache IgniteCache<Integer, String> cache = ignite.cache("myCache");
方法2:显式配置客户端缓存时仅指定必要参数
如果需要在客户端显式定义缓存配置,只需指定缓存名称,不要设置驱逐策略和堆内缓存相关参数,客户端会自动继承服务端的缓存配置:
CacheConfiguration<Integer, String> cacheCfg = new CacheConfiguration<>("myCache"); // 不要添加setEvictionPolicyFactory和setOnheapCacheEnabled配置 IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cacheCfg);
特殊情况:如果使用厚客户端(数据节点)
若需要客户端作为集群的一部分存储数据(厚客户端),则需确保客户端的缓存配置与服务端完全一致,同时启动客户端时不要启用瘦客户端模式(即不设置ClientConfiguration),而是用常规的IgniteConfiguration启动节点,此时客户端会作为数据节点加入集群,配置的驱逐策略才会生效。
内容的提问来源于stack exchange,提问作者Peter Trinh
相关产品推荐
相关产品推荐

