我正在使用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中的上下文中查看此代码

10-01 09:29