Spring Boot和Hazelcast使用详解
作者:banq 发布时间:2021-06-08 11:28:02
你是否遇到过应用程序性能下降的问题?有没有想过提升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项目中并开始使用它的优势。
<parent>
<groupId> org.springframework.boot </ groupId>
<artifactId> spring-boot-starter-parent </ artifactId>
<version> 2.0.0.RELEASE </ version>
</ parent>
<dependencies>
<dependency >
<groupId> org.springframework.boot </ groupId>
<artifactId> spring-boot-starter-web </ artifactId>
</ dependency>
<dependency>
<groupId> com.hazelcast </ groupId>
<artifactId> hazelcast </ artifactId>
</ dependency>
<dependency>
<groupId> com.hazelcast </ groupId>
<artifactId> hazelcast-spring </ artifactId>
</ dependency>
</ dependencies>
要将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<String, String> hazelcastMap = hazelcastInstance.getMap("my-map");
hazelcastMap.put(key, value);
return "Data is stored.";
}
@GetMapping(value = "/read-data")
public String readDataFromHazelcast(@RequestParam String key) {
Map<String, String> hazelcastMap = hazelcastInstance.getMap("my-map");
return hazelcastMap.get(key);
}
@GetMapping(value = "/read-all-data")
public Map<String, String> readAllDataFromHazelcast() {
Map<String, String> hazelcastMap = hazelcastInstance.getMap("my-map");
return hazelcastInstance.getMap("my-map");
}
}
在控制器中,我们自动安装了HazelcastInstance - 这是Hazelcast库提供的接口。通过使用此实例,我们可以操作内存数据网格中的数据。因此,可以使用Postman将一些记录保存到Hazelcast中。
重要的是 - 即使从不同的SpringBoot应用程序实例启动,也可以将数据存储在同一个缓存中。比如可以将应用程序端口更改为8081,并运行该应用程序的另一个实例,然后将尝试从之前存储的Hazelcast中获取所有数据。
因为Hazelcast是集群的,数据可以在许多应用程序实例之间共享。
源码:Github
来源:https://www.jdon.com/49954


猜你喜欢
- 为什么需要全局异常处理在传统 Spring Boot 应用中, 我们 @ControllerAdvice 来处理全局的异常,进行统一包装返回
- 1. 判断允许上传文件的 文件后缀/图片后缀/相片后缀 和 其它工具类import org.springframework.stereoty
- 前言之前几篇我们介绍了贝塞尔曲线的原理、绘制曲线和动效实现,这些都是代码预设好的,如果我们要根据需要自行绘制曲线,就需要使用交互来实现了。本
- JDK SPI是什么最近工作中听几个同事说了好几次SPI这个名词,虽然和我没关系,但是心里默默想还是学习一下,不然下次和我说到SPI,连是什
- 本文实例讲述了C#利用Random得随机数求均值、方差、正态分布的方法。分享给大家供大家参考。具体如下:最近在做中小学试卷分析系统,其中数据
- rocketmq消费者注册监听有两种模式有序消费MessageListenerOrderly和并发消费MessageListenerConc
- 引用类型包含值类型字段,引用类型初始化后,值类型默认会被初始化为0、Null。 CLR允许为值类型定义构造器,但是构造器的调用,就必须显式的
- 使用了RecyclerView嵌套RecyclerView的方案。购物车的第一个界面为RecyclerView,每个Item里面包含一个店铺
- 本文实例讲述了Java接口的简单定义与实现方法。分享给大家供大家参考,具体如下:1、接口是Java中最终要的概念,接口可以理解为一种特殊的类
- springmvc提供了 * ,类似于过滤器,他将在我们的请求具体出来之前先做检查,有权决定接下来是否继续,对我们的请求进行加工。 * ,可
- (一)什么是微服务网关后端写完所有的微服务之后,最终是要交给前端去调用。我们都知道每个微服务都有各自的端口号,如果前端直接通过IP加端口的方
- Queue接口先看下Queue的继承关系和其中定义的方法:Queue继承自Collection,Collection继承自Iterable。
- 配置注解的支持:在spring4之后,想要使用注解形式,必须得要引入 aop 的包<dependency><groupId
- 关于ListBoxListBox是WinForm中的列表控件,它提供了一个项目列表(一组数据项),用户可以选择一个或者多个条目,当列表项目过
- Java实现PC微信扫码支付做一个电商网站支付功能必不可少,那我们今天就来盘一盘微信支付。微信支付官方网站业务流程:开发指引文档支付服务开发
- yaml介绍YAML(YAML Ain't Markup Language),一种数据序列化格式优点:容易阅读容易与脚本语言交互以数
- 我就废话不多说啦,大家还是直接看代码吧~[ { "orderNo": "3213123123123
- 今天给大家分享纯注解版spring与mybatis的整合mybatis包下:有这几个,上面图片没有展开配置Bean:MyBatisAutoC
- 本文实例讲述了Java日期操作类常见用法。分享给大家供大家参考,具体如下:一 取出当前日期时间1 代码import java.time.*;
- SpringBoot是什么?Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初