Spring Boot和Hazelcast使用详解

时间:2022-11-09 13:08:45

你是否遇到过应用程序性能下降的问题?有没有想过提升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项目中并开始使用它的优势。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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配置文件。

我们选择第一个方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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获取所有数据;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@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