是否可以将 MAP 作为值存储到 Hazelcast 中的 MULTIMAP 中?

Posted

技术标签:

【中文标题】是否可以将 MAP 作为值存储到 Hazelcast 中的 MULTIMAP 中?【英文标题】:Is it possible to store MAP as a value into MULTIMAP in the Hazelcast? 【发布时间】:2021-05-03 17:39:45 【问题描述】:

请在下面找到示例代码,

Map userSessionData = client.getMap("userSessionData"); userSessionData.put(userId, userData.getSessionId());

MultiMap > 机构用户数据 = client.getMultiMap("机构用户数据"); 机构用户缓存.put(机构名称,用户会话数据);

在尝试使用上面的代码时,它会在下面抛出异常,

com.hazelcast.nio.serialization.HazelcastSerializationException:无法序列化“com.hazelcast.client.proxy.ClientMapProxy” 在 com.hazelcast.internal.serialization.impl.SerializationUtil.handleSerializeException(SerializationUtil.java:82) 在 com.hazelcast.internal.serialization.impl.AbstractSerializationService.toBytes(AbstractSerializationService.java:157) 在 com.hazelcast.internal.serialization.impl.AbstractSerializationService.toBytes(AbstractSerializationService.java:133) 在 com.hazelcast.internal.serialization.impl.AbstractSerializationService.toData(AbstractSerializationService.java:118) 在 com.hazelcast.internal.serialization.impl.AbstractSerializationService.toData(AbstractSerializationService.java:106) 在 com.hazelcast.client.spi.ClientProxy.toData(ClientProxy.java:98) 在 com.hazelcast.client.proxy.ClientMultiMapProxy.put(ClientMultiMapProxy.java:112)

原因:com.hazelcast.nio.serialization.HazelcastSerializationException:com.hazelcast.client.proxy.ClientMapProxy 类没有合适的序列化程序 在 com.hazelcast.internal.serialization.impl.AbstractSerializationService.serializerFor(AbstractSerializationService.java:487) 在 com.hazelcast.internal.serialization.impl.AbstractSerializationService.toBytes(AbstractSerializationService.java:146)

【问题讨论】:

【参考方案1】:

Hazelcast 地图故意不可序列化,因为它们是远程和并发的。内容会因其他客户端使用地图的插入/更新/删除而改变。

如果您检索地图的entrySet(),则可以拍摄快照。 这可能超出客户的承受能力。

要将此快照存储回 Hazelcast,需要将其放入可序列化的集合中,例如 HashMap

如果是会话,这样的快照会在某个时间点显示用户,并且不会随着用户登录和注销而改变。

【讨论】:

以上是关于是否可以将 MAP 作为值存储到 Hazelcast 中的 MULTIMAP 中?的主要内容,如果未能解决你的问题,请参考以下文章

java map表里,key值能否映射到多个Value?

是否将地图尺寸作为值插入地图未定义的行为?

STL map 按key值和按value值排序

将记录作为键映射 - 如何检查Erlang中是否存在密钥

java 有没有一个集合可以存放重复的key和value

是否可以将 ArrayList 索引作为 listkey 存储到 Struts 2 选择框中?