见下图。
图片.png
我已经使用等号将密钥放入缓存中 方法如下:
@Override
public boolean equals(Object obj) {
HierarchyMasterKey hierarchyMasterKey = (HierarchyMasterKey) obj;
return equalTo(this.hmCustNo, hierarchyMasterKey.hmCustNo) &&
equalTo(this.hmFromDate, hierarchyMasterKey.hmFromDate) &&
equalTo(this.hmParentCustNo, hierarchyMasterKey.hmParentCustNo) &&
equalTo(this.hmActNo, hierarchyMasterKey.hmActNo);
}
(equalTo 方法基本上是空安全等于检查。
哈希代码的计算方法如下:
@Override
public int hashCode() {
return Objects.hash(hmCustNo,hmActNo);
}
当我试图从中得到它时, equals 方法不会被执行。为什么会这样?点燃如何得到 没有执行等于的键?
[我有一个缓存,其中包含一个层次结构主键和一个层次结构主列表 作为值并使用外部化来覆盖哈希码和等于]
默认情况下,Ignite 将以二进制序列化形式逐个字段(包括字段排序(比较键。
hashCode
仅在您的类实现Externalizable
时使用。这会影响性能。
您还可以实现Binarylizable
并实现相应的方法来影响对象的存储和比较方式。
在这里发现了问题。这实际上是一个有趣的观察。
我的缓存在堆上被禁用。Ignite 将执行 BPlusTree 搜索堆外项,其中不需要执行 equals 方法来查找结果。
如果启用,它将像哈希图获取操作一样工作。