Apache Ignite 作为 Hibernate L2 缓存存储重复实体

Apache Ignite as Hibernate L2 cache storing duplicate entities

环境:

设置:

所以我 运行 遇到的问题是 reader 端永远不会从写入端获取更改。我已经使用 IgniteInternalCache.entrySet() 转储了缓存的内容(与状态频率相同),它在缓存中显示了两个具有相同键的 ToggleSwitch 实例。

我已经尝试将它们添加到缓存键中的一个集合中,看看是否会产生相同的结果,但它按预期运行,只存储了一个实例。

我现在不知道发生了什么,有什么想法吗?是错误还是配置错误?

很可能 equals and/or hashCode 的密钥实现不正确。我会把这两个密钥和它们的内容一起存储在缓存中,然后尝试调用这些方法来检查它们是否一致。

--更新--

当使用默认的二进制编组器时,在多应用程序环境中也会出现此问题。此处有更多详细信息:https://issues.apache.org/jira/browse/IGNITE-3429

作为解决方法,您可以从默认二进制序列化切换到 OptimizedMarhsaller(请参阅下面的配置示例)。这将强制密钥对象在服务器端反序列化并正确应用自定义 equals 逻辑。

<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="marshaller">
        <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller"/>
    </property>
</bean>