Hazelcast:使用 ConcurrentHashMap 或 ITopic 消息传递对象来分发数据?

Hazelcast: use ConcurrentHashMap or ITopic messaging object to distribute data?

我有一个分布在多个 tomcat 中的应用程序,并使用 hazel cast 来共享数据。在应用程序中,我使用需要在所有 Tomcat 中保持一致的地图。当地图中的数据发生变化时,有什么理由更喜欢使用消息分发机制(ITopic 对象)来保持一致性?或者分布式 ConcurrentHashMap 在所描述的情况下总是正确的选择——当我需要每个 tomcat 中的映射始终保存完全相同的数据时(操作速度、可靠性)? ConcurrentHashMap 如何在幕后工作以在不同的 JVM 中保持完全一致?而且,另一方面,分发消息是如何工作的?

当你需要非常高的并发时使用ConcurrentHashMap。

它是线程安全的,无需同步整个地图。

读取速度非常快,而写入是用锁完成的。

对象级别没有锁定。

在 hashmap 桶级别锁定的粒度要细得多。

如果一个线程试图修改 ConcurrentHashMap 而另一个线程正在迭代它,ConcurrentHashMap 不会抛出 ConcurrentModificationException。

ConcurrentHashMap 使用大量锁。

你应该使用IMap

ITopic 是异步的,因此不会实现“始终完全相同的数据”的目标。