你是否遇到過應用程序性能下降的問題?有沒有想過提升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項目中并開始使用它的優勢。
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