使用Hazelcast时应缓存ReplicatedMap引用还是每次调用接口获取?
Hazelcast ReplicatedMap获取方式选型说明
核心结论
可以直接在单例Bean初始化时一次性获取ReplicatedMap实例缓存使用,不需要每次调用时重新执行hz.getReplicatedMap("mymap"),该方案完全适配服务端重启的场景。
原因说明
HazelcastInstance.getReplicatedMap()仅返回本地的分布式对象代理实例,属于O(1)的轻量本地操作,不会触发远程调用、也不会在调用时同步全量数据,重复调用无性能损耗,但也完全没有必要重复执行。- Hazelcast 4.2.1版本的分布式对象代理本身适配了集群自动重连逻辑:只要你在客户端配置中开启了集群重连策略(默认开启),当服务端重启完成、客户端自动重连成功后,你提前缓存的
ReplicatedMap代理可以直接正常使用,不需要重新获取。 - 服务端重启过程中调用
ReplicatedMap的读写接口抛出的集群不可用、操作超时异常,属于业务层需要处理的重试/降级逻辑,和ReplicatedMap实例是否重新获取没有关联。
最佳实践参考
在Spring Boot项目中可以直接将ReplicatedMap注册为单例Bean,其他业务Bean直接注入使用即可,示例代码如下:
@Configuration public class HazelcastMapConfig { // 直接注册为单例Bean,全局复用同一个实例 @Bean public ReplicatedMap<String, YourBizObj> myReplicatedMap(HazelcastInstance hazelcastInstance) { return hazelcastInstance.getReplicatedMap("mymap"); } }
内容的提问来源于stack exchange,提问作者Niels Harremoes
相关产品推荐
相关产品推荐

