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是一个高度可扩展的数据分发和集群平台。特性包括:

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

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

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

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

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

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

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

  8. 支持同步和异步持久化。

  9. 为Hibernate提供二级缓存Provider 。

  10. 通过JMX监控和管理集群。

  11. 支持动态HTTP Session集群。

  12. 利用备份实现动态分割。

  13. 支持动态故障恢复。

现在需要将它添加到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,Hazelcast
0
投稿

猜你喜欢

  • ArrayList和LinkedList的区别、扩容机制以及底层的实现方式

    2023-11-27 01:26:57
  • 英雄联盟辅助lol挂机不被踢的方法(lol挂机脚本)

    2022-03-15 12:57:59
  • 基于SpringBoot实现自定义插件的流程详解

    2021-08-15 20:34:04
  • SpringCloud分布式链路跟踪的方法

    2023-11-24 23:42:19
  • springboot 如何设置端口号和添加项目名

    2022-01-11 07:31:12
  • 给C语言初学者的学习建议

    2023-06-14 17:23:44
  • 细说C#中的枚举:转换、标志和属性

    2021-07-10 06:01:05
  • 使用自定义注解+springAop实现参数非空校验方式

    2023-09-21 00:13:22
  • 通过Mybatis实现单表内一对多的数据展示示例代码

    2021-12-20 12:34:31
  • Android ViewPager实现图片轮播效果

    2023-03-20 17:00:58
  • C#集合之字典的用法

    2022-04-11 23:27:19
  • 详解java8在Collection中新增加的方法removeIf

    2022-06-04 20:51:45
  • Spring Boot+Mybatis+Druid+PageHelper实现多数据源并分页的方法

    2023-09-06 19:53:30
  • 聊聊如何打印GC日志排查的问题

    2023-01-22 22:10:56
  • C#中使用jieba.NET、WordCloudSharp制作词云图的步骤

    2022-02-10 19:38:49
  • 解决springboot 启动找不到主类的问题

    2023-06-13 04:58:56
  • Java实现的3des加密解密工具类示例

    2023-08-21 14:00:01
  • Java 1.8使用数组实现循环队列

    2022-02-11 04:00:10
  • java排序算法之冒泡排序

    2023-04-05 21:03:42
  • Java Main 函数启动不退出的解决方案

    2022-03-24 14:25:03
  • asp之家 软件编程 m.aspxhome.com