【发布时间】:2016-12-27 16:26:18
【问题描述】:
有没有办法在节点启动后在 hazelcast(3.4 版)节点上执行代码片段?
这个想法是:一旦 hazelcast 节点之一开始创建地图(不等待 .getMap 在客户端执行)并从数据库中填充数据,因此当客户端请求数据时,地图已经填充。
【问题讨论】:
标签: java hazelcast hazelcast-imap
有没有办法在节点启动后在 hazelcast(3.4 版)节点上执行代码片段?
这个想法是:一旦 hazelcast 节点之一开始创建地图(不等待 .getMap 在客户端执行)并从数据库中填充数据,因此当客户端请求数据时,地图已经填充。
【问题讨论】:
标签: java hazelcast hazelcast-imap
是的。您需要为您的IMap 实现MapLoader,然后使用MapLoader.loadAllKeys() 方法用热键初始化地图。
这就是文档所说的:
您可以使用 MapLoader.loadAllKeys API 预填充 首次触摸/使用地图时的内存中地图。如果 MapLoader.loadAllKeys 返回 NULL 则不会加载任何内容。您的 MapLoader.loadAllKeys 实现可以返回全部或部分 键。例如,您可以只选择并返回热键。 MapLoader.loadAllKeys 是预填充地图的最快方式 因为 Hazelcast 将通过让每个节点优化加载过程 加载其拥有的条目部分。
【讨论】:
这可以通过在 hazelcast.xml 中定义自定义服务来解决。服务构造函数在节点启动时被调用,并且可以从那里请求和填充 hazelcast 地图。 但是getMap的调用应该在new Thread中完成
【讨论】: