簡體   English   中英

當hashCode被覆蓋時,Ignite如何執行cache.get()操作?

[英]How Ignite performs cache.get() operation when hashCode is overridden?

請參閱下面的圖像。

Image.png

我已經使用equals方法將密鑰放入緩存中,如下所示:

@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方法基本上是null安全等於檢查的對象。)

hashCode計算如下:

    @Override 
    public int hashCode() { 
            return Objects.hash(hmCustNo,hmActNo); 
    } 

當我嘗試從中獲取時,equals方法將不會執行。 為什么會這樣呢? 點火如何在不執行等於的情況下獲得鑰匙?

[我有一個緩存,該緩存具有一個HierarchyMasterKey和一個HierarchyMaster列表作為值,並使用Externalizable覆蓋哈希碼和等於]

默認情況下,Ignite將以二進制序列化形式在逐字段(包括字段排序)上比較鍵。

hashCode僅在您的類實現Externalizable 這會影響性能。

您還可以實現Binarylizable並實現相應的方法來影響對象的存儲和比較方式。

在這里找到問題。 它實際上是一個有趣的觀察。

我的緩存已禁用在堆上。 Ignite會在BPlusTree中搜索堆外項目,在這里不需要執行equals方法來查找結果。

如果啟用它,它將像哈希映射的get操作一樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM