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

Does a Hazelcast cache read have the potential to block a write to the same cache

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

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

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

查看 Hazelcast 的文档 IMap,我看不到任何关于读取阻塞写入的提及。

已经读到缓存未命中可能导致数据加载到我们正在访问的缓存中。我认为我们可以接受(只要它不会导致写锁)

如有任何建议,我们将不胜感激。

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

如果需要,有几个选项可以允许完全并发的读取和写入。第一个是在报告系统客户端上启用 read from backups and the second would be to enable near cache。当然,在这两种情况下,都涉及一个额外的副本,因此 "get" 可能 return 一个落后于当前状态的值。