我正在使用hazelcast(v2.1.3)-在地图的存储负载中,“ store”一直在被调用,而不是“全部存储”(即使写入延迟秒数标志大于0):
<map-store enabled="true">
<class-name>test.test.abcMap</class-name>
<write-delay-seconds>5</write-delay-seconds>
</map-store>
任何有助于解决此问题的有用建议都将受到欢迎。我曾在一个不同的项目上进行过紧急写作,但似乎无法立即使他们工作。谢谢
编辑
在write-delay-seconds中指定的延迟之后,将调用存储实现(而不是全部存储)。
最佳答案
您确定需要存储多个条目吗?
如果仅添加或更新了映射中的一项,则即使启用了写后写功能,也会调用MapStore.store(key, value)
。 MapStore.storeAll(map)
仅在需要存储多个条目的情况下才会被调用。
以下是com.hazelcast.impl.CMap.runStoreUpdate()
中的相关代码(成员store
的类型为MapStore
):
if (updates.size() == 1) {
Map.Entry entry = updates.entrySet().iterator().next();
store.store(entry.getKey(), entry.getValue());
} else if (updates.size() > 1) {
store.storeAll(updates);
}
MapStore.delete()
和MapStore.deleteAll()
同样。您可以在Github的Hazelcast source中的上下文中查看此代码