我知道這可能來不及回答你的問題,但當我試圖爲我的聊天服務創建自己的分佈式用戶會話實現時,我遇到了同樣的問題。
所以我所做的就是我的序列化映射到字節[]然後堅持到hazelcast的IMAP。
檢查下面的代碼:
IMap<String, byte[]> distributedMap = hazelcast.getMap(MAP_NAME);
Map<String, Serializable> myMap = new HashMap<String, Serializable>();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(myMap);
distributedMap.put(sessionId, baos.toByteArray());
,當我嘗試檢索持久用戶會話,我做的是類似下面的代碼。
IMap<String, byte[]> distributedMap = hazelcast.getMap(MAP_NAME);
byte[] raw = distributedMap.get(sessionId);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
Map<String, Serializable> myMap = (Map<String, Serializable>) ois.readObject();
然後後,我讓我的地圖回來,我可以做任何事情。我希望這能幫助那些需要像我一樣做的人。
爲什麼不創建一個將替換'HashMap'的容器類?您可以在其中實現get,add和其他Map方法。 –
Mackiavelli
我這樣做 - 'HashMap'只是一個例子。如果我不得不猜測當前實施中效率低下的問題,那就是Hazelcast並沒有深入研究內部地圖。所以當我需要更新內部地圖中的對象時,我必須取出對象,根據需要更改值,然後替換Hazelcast IMap中的整個對象。我想知道是否有更有效的方式,Hazelcast可以更多地瞭解它處理的內容。 –
如果對象是可變的,那麼你不應該有任何問題直接'get()' - 對象並在其上工作(與你必須做的相反) – Mackiavelli