[翻译笔记] What is Hazelcast IMDG?
原文:
https://docs.hazelcast.com/imdg/4.2/overview/what-is-imdg
Hazelcast是开源分布式内存对象存储, 针对java
用户来说有两种部署方法, 一种是集成部署,感觉就是插件,只需要 gradle 或者 maven 引用包即可;一种是客户端部署。
安装方式也有多种,cli,maven,docker,下载包等。
使用的时候实例化自己 或者 client 即可。配置可以采用声明式配置,配置到 yml 或者 xml 里面,也可以通过代码的方式,在实例化的过程中添加配置,比如集群名称,比如子节点个数,ip, 端口,缓存失效时间等等。
并且支持多种数据结构。
它采用一致性 hash 算法将对象存入分区里面。一致性hash算法其实应用很方便,在一些集群分配,分库分表都可以使用。能保证机器或者表接收请求随机,有规律,负载均衡。
如何跟Java集成呢?(实践经验总结)
-
比较优雅的做法是使用 spring cache 和 hazelcast 集成,这样可以采用注解的方式进行缓存,不用显示去存数据,需要导入一下包,gradle 配置, maven 配置可以自己查 包名+maven。
implementation 'org.springframework.boot:spring-boot-starter-cache' implementation 'com.hazelcast:hazelcast-all:4.2.8'
-
在 Mapper 层可以使用
@CacheConfig(cacheNames = "xxx")
@Cacheable(key = "#param1 + '-' +#param2")
的方式分别对类和接口进行缓存设置。cacheNames 就是统一的缓存名称,key 就是以 map 形式存储的 key 值, value 则为 mapper 获取的数据库的数据。可以多个 key 共用同一个 cacheNames。 -
缓存失效时间可以自行设置。
@Configuration
public class HazelcastCacheConfig {
@Bean("defaultHazelcastConfig")
public Config config() {
MapConfig mapConfig = new MapConfig("xxx");
mapConfig.setTimeToLiveSeconds(300);
Config config = new Config();
config.addMapConfig(mapConfig);
return config;
}
@Bean
public HazelcastInstance hazelcastInstance(Config config) {
return Hazelcast.newHazelcastInstance(config);
}
}
- 如果需要跟 k8s 通讯,还需要额外的设置。
可以参考链接:Hazelcast with Spring Boot on Kubernetes
@Configuration
class HazelcastK8sConfig {
@Bean("k8sHazelcastConfig")
public Config config() {
Config config = new Config();
config.getNetworkConfig().getJoin().getTcpIpConfig().setEnabled(false);
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
config
.getNetworkConfig()
.getJoin()
.getKubernetesConfig()
.setEnabled(true)
.setProperty("namespace", "default")
.setProperty("service-name", "hazelcast-service");
MapConfig mapConfig = new MapConfig("xxx");
mapConfig.setTimeToLiveSeconds(300);
config.addMapConfig(mapConfig);
return config;
}
@Bean
public HazelcastInstance hazelcastInstance(Config config) {
return Hazelcast.newHazelcastInstance(config);
}
}
service.yaml
apiVersion: v1
kind: Service
metadata:
name: hazelcast-service
spec:
selector:
app: xx-server
ports:
- name: hazelcast
port: 5701
- 如果需要对缓存进行重新获取,可以先清理缓存。
cacheManager.getCache("xxx").clear();
爱心提示:上文中的 xxx 是同一个名字即可
。
如果能启动,日志里面会打印自动生成的节点信息, 恭喜你,程序可以跑起来啦~
空白_d: 博主讲解的很详细,感谢博主的分享.
喵喵7781: 欢迎常来,多多交流,虽然我不知道你是谁表情包
空白_d: 博主总结的很到位,感谢博主的分享。
空白_d: 博主总结的很到位,感谢博主的分享。
空白_d: 博主总结的很到位,感谢博主的分享。