2017-02-10 72 views
0
一個緩存鍵

所以我最近遇到了一個錯誤,而使用Ignite驅使我瘋了推測,認爲這篇帖子可能幫助一些迷失的靈魂在那裏所以這裏去:錯誤使用地圖作爲點燃

場景如下所示:我有一個類A,只是有一個java.util.Map字段,我正在使用它作爲點火緩存鍵映射到某個值。

我具有相同的服務的兩個實例:S1 & S2,每個運行的點燃節點。 讓我們參照實例的點燃節點作爲節點ñ中號

兩種服務都在做有關Ignite affinityCalls,因此無論該服務的實例中使用時,點燃呼叫將轉到同一個節點。

這種情況發生的情形如下: 1.服務S1確實上Ñ並存儲的親和呼叫在Ñ的緩存的的映射的 - >值V 2 。服務S2做相同的親和力調用,並去N,但是,當試圖檢索放在步驟1中的N的緩存中的值時,它無法檢索它,就好像緩存不'不包含它。

爲了讓事情更清晰,考慮下面的僞代碼:

S1確實在步驟1以下。

IgniteCache igniteCache = ....;

Map map1 = new Map(); map1.put(「some key」,「some value」);

A cacheKey = new A(map);

igniteCache.put(keyInCache,anything);

S2確實在步驟2

IgniteCache igniteCache下面= ....;

Map map2 = new Map(); map2.put(「some key」,「some value」);

A keyToRetrieve = new A(map2);

igniteCache.contains(keyToRetrive) - > false。

儘管keyToRetrieve.equals(cacheKey)爲true。

並且緩存確實包含cacheKey。

這個問題,因爲我發現它是罪魁禍首是一個類型的主要使用地圖作爲一個字段。 因爲它似乎點燃與處理有地圖成員鍵,也爲這裏所說的麻煩:

Ignite cache.containsKey returns false although keys are equal

回答

0

答案是:

使用其他的東西比一個Map作爲重點。我用了一個整數,然後所有的問題都消失了。

我懷疑它可能與如何檢查地圖是否等同於Ignite中的場景相關。