Spring Boot和Hazelcast使用详解

这篇文章主要介绍了Spring Boot和Hazelcast使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

你是否遇到过应用程序性能下降的问题?有没有想过提升Spring性能?如果是这样 - 那么这篇文章绝对适合你。在这里,我们将谈论使用超级强大和领先的内存数据网格提高应用程序的性能

什么是Hazelcast?

Hazelcast是一个内存分布式计算平台,用于管理数据并并行执行执行应用程序。

1. 它是用Java编写的。

2. 与其他一些内存数据库(如redis)不同,Hazelcast是多线程的,这意味着可从所有可用的cpu内核中受益。

3. 与其他内存数据网格不同 - 它设计用于分布式环境。它支持每个群集无限数量的map和缓存。

根据基准测试,Hazelcast在获取数据方面比Redis快56%,在设置数据方面比Redis快44%。

Hazelcast是一个高度可扩展的数据分发和集群平台。特性包括

提供java.util.{Queue, Set, List, Map}分布式实现。

提供java.util.concurrency.locks.Lock分布式实现。

提供java.util.concurrent.ExecutorService分布式实现。

提供用于一对多关系的分布式MultiMap。

提供用于发布/订阅的分布式Topic(主题)。

通过JCA与J2EE容器集成和事务支持

提供用于安全集群的Socket层加密。

支持同步和异步持久化。

为Hibernate提供二级缓存Provider 。

通过JMX监控和管理集群。

支持动态HTTP Session集群。

利用备份实现动态分割。

支持动态故障恢复。

现在需要将它添加到Spring Boot项目中并开始使用它的优势。

org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE org.springframework.boot spring-boot-starter-web com.hazelcast hazelcast com.hazelcast hazelcast-spring

要将Hazelcast添加到Spring Boot应用程序,只需要两个依赖项。下我们需要配置Hazelcast实例。有两种方法可以做到这一点:

1. 通过Java配置。

2. 通过创建hazelcast.xml配置文件

我们选择第一个方式:

import com.hazelcast.config.Config; import com.hazelcast.config.evictionPolicy; import com.hazelcast.config.MapConfig; import com.hazelcast.config.MaxSizeConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class HazelcastConfiguration { @Bean public Config hazelCastConfig(){ Config config = new Config(); config.setInstanceName(“hazelcast-instance”)。 addMapConfig( new MapConfig()。 setName(“configuration”) .setMaxSizeConfig(新MaxSizeConfig(200,MaxSizeConfig.MaxSizePolicy。FREE_HEAP_SIZE)) .setevictionPolicy(evictionPolicy。LRU) .setTimetoLiveSeconds(-1)); return config; } }

实例已配置 - 现在我们可以访问Hazelcast并使用数据进行操作。

对于这个例子,将创建只有3个映射的HazelcastController:

一个是设置数据;

一种是按ke键查询数据;

一个是从Hazelcast获取所有数据;

@RestController @RequestMapping("/hazelcast") public class HazelcastController { private final Logger logger = LoggerFactory.getLogger(HazelcastController.class); private final HazelcastInstance hazelcastInstance; @Autowired HazelcastController(HazelcastInstance hazelcastInstance) { this.hazelcastInstance = hazelcastInstance; } @PostMapping(value = "/write-data") public String writeDataToHazelcast(@RequestParam String key, @RequestParam String value) { Map hazelcastMap = hazelcastInstance.getMap("my-map"); hazelcastMap.put(key, value); return "Data is stored."; } @GetMapping(value = "/read-data") public String readDataFromHazelcast(@RequestParam String key) { Map hazelcastMap = hazelcastInstance.getMap("my-map"); return hazelcastMap.get(key); } @GetMapping(value = "/read-all-data") public Map readAllDataFromHazelcast() { Map hazelcastMap = hazelcastInstance.getMap("my-map"); return hazelcastInstance.getMap("my-map"); } }

在控制器中,我们自动安装了HazelcastInstance  - 这是Hazelcast库提供的接口。通过使用此实例,我们可以操作内存数据网格中的数据。因此,可以使用Postman将一些记录保存到Hazelcast中。

重要的是 - 即使从不同的SpringBoot应用程序实例启动,也可以将数据存储在同一个缓存中。比如可以将应用程序端口更改为8081,并运行该应用程序的另一个实例,然后将尝试从之前存储的Hazelcast中获取所有数据。

因为Hazelcast是集群的,数据可以在许多应用程序实例之间共享。

源码:Github

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...