Spring Boot和Hazelcast使用详解

 更新时间:2018年09月07日 08:25:34   作者:banq  
这篇文章主要介绍了Spring Boot和Hazelcast使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

你是否遇到过应用程序性能下降的问题?有没有想过提升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

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

相关文章

  • java ArrayList的深拷贝与浅拷贝问题

    java ArrayList的深拷贝与浅拷贝问题

    这篇文章主要介绍了java ArrayList的深拷贝与浅拷贝问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java游戏开发之俄罗斯方块的实现

    Java游戏开发之俄罗斯方块的实现

    俄罗斯方块是一个最初由阿列克谢帕吉特诺夫在苏联设计和编程的益智类视频游戏。本文和大家分享了利用Java语言实现这一经典的小游戏的示例代码,需要的可以参考一下
    2022-05-05
  • nacos服务注册命名空间指定方式

    nacos服务注册命名空间指定方式

    文章介绍了Nacos服务注册命名空间的用途,以及如何创建和指定命名空间,命名空间用于隔离不同项目的服务和配置,避免冲突,通过在配置文件中指定命名空间ID,服务会注册到相应的命名空间中,这样可以更好地管理不同环境下的配置文件
    2024-12-12
  • Java程序顺序结构中逻辑控制语句详解流程

    Java程序顺序结构中逻辑控制语句详解流程

    在程序开发的过程之中一共会存在有三种程序逻辑:顺序结构、分支结构、循环结构,对于之前所编写的代码大部分都是顺序结构的定义,即:所有的程序将按照定义的代码顺序依次执行
    2021-10-10
  • CentOS 7系统下配置自定义JDK的教程

    CentOS 7系统下配置自定义JDK的教程

    这篇文章主要给大家介绍了在CentOS 7系统下配置自定义JDK的教程,文中将配置的方法教程介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • Spring MVC   文件、cookies的接收 与REST响应详解

    Spring MVC   文件、cookies的接收 与REST响应详

    在SpringMVC中,使用@RequestPart注解可接收文件并处理多部分请求,同时可以通过@CookieValue和HttpServletResponse来获取和设置Cookies,本文介绍Spring MVC   文件、cookies的接收 与REST响应,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • SpringBoot Jpa 自定义查询实现代码详解

    SpringBoot Jpa 自定义查询实现代码详解

    这篇文章主要介绍了SpringBoot Jpa 自定义查询实现代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java缓存池代码实例详解

    Java缓存池代码实例详解

    本篇文章主要介绍了Java实现简单的缓存方法实例,需要的朋友可以参考下
    2017-04-04
  • 微信支付java版V3验证数据合法性(Deom)

    微信支付java版V3验证数据合法性(Deom)

    这篇文章主要介绍了微信支付java版V3验证数据合法性(Deom)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • 详解Java冒泡排序

    详解Java冒泡排序

    本篇文章通过代码实例给大家详细分析了Java冒泡排序的原理,有兴趣的朋友可以学习下。
    2018-02-02

最新评论