Hazelcast缓存读取是否有可能阻止对同一缓存的写入

时间:2019-08-21 12:08:48

标签: hazelcast hazelcast-imap

我们在应用程序中使用了Hazelcast缓存。

我们正在考虑创建一个只读报告系统,以显示缓存中项目的数据。

某些缓存的项目非常大。我们担心从新的报告应用程序中读取其中的一些大项可能会阻止在我们现有的应用程序之一中进行写入。

在查看Hazelcast的IMap的文档时,我看不到任何提及阻止阻塞写入的内容。

已经读到,缓存丢失可能导致数据加载到我们正在访问的缓存中。我认为我们可以(只要它不会引起写锁定)就可以了

任何对此的建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

从技术上讲,对于默认配置的IMap,答案是肯定的,但不太可能会引起问题。特定键上的每个操作都由同一个“分区线程”提供服务,因此对同一键的任何两个操作都将在整个操作的一小部分中被序列化。请参阅:here。分区线程将仅对成员执行本地映射操作。 I / O将移交给另一个线程。请注意,I / O是操作的一部分,将随对象大小而变化。因此,总的来说,这些操作可以并发运行,但是同一键上的操作会有一个简短的同步点。我的建议是执行高并发测试。在实践中,我从来没有见过这个问题。

如果需要,有两个选项可以允许完全并发的读写。第一个是在报告系统客户端上启用read from backups,第二个是在报告系统客户端上启用near cache。当然,在两种情况下,都涉及一个额外的副本,因此“获取”可能返回当前状态之后的值。