Spring Boot和Hazelcast使用詳解
你是否遇到過應(yīng)用程序性能下降的問題?有沒有想過提升Spring性能?如果是這樣 - 那么這篇文章絕對適合你。在這里,我們將談?wù)撌褂贸墢?qiáng)大和領(lǐng)先的內(nèi)存數(shù)據(jù)網(wǎng)格提高應(yīng)用程序的性能!
什么是Hazelcast?
Hazelcast是一個(gè)內(nèi)存分布式計(jì)算平臺(tái),用于管理數(shù)據(jù)并并行執(zhí)行執(zhí)行應(yīng)用程序。
1. 它是用Java編寫的。
2. 與其他一些內(nèi)存數(shù)據(jù)庫(如redis)不同,Hazelcast是多線程的,這意味著可從所有可用的CPU內(nèi)核中受益。
3. 與其他內(nèi)存數(shù)據(jù)網(wǎng)格不同 - 它設(shè)計(jì)用于分布式環(huán)境。它支持每個(gè)群集無限數(shù)量的map和緩存。
根據(jù)基準(zhǔn)測試,Hazelcast在獲取數(shù)據(jù)方面比Redis快56%,在設(shè)置數(shù)據(jù)方面比Redis快44%。
Hazelcast是一個(gè)高度可擴(kuò)展的數(shù)據(jù)分發(fā)和集群平臺(tái)。特性包括:
- 提供java.util.{Queue, Set, List, Map}分布式實(shí)現(xiàn)。
- 提供java.util.concurrency.locks.Lock分布式實(shí)現(xiàn)。
- 提供java.util.concurrent.ExecutorService分布式實(shí)現(xiàn)。
- 提供用于一對多關(guān)系的分布式MultiMap。
- 提供用于發(fā)布/訂閱的分布式Topic(主題)。
- 通過JCA與J2EE容器集成和事務(wù)支持。
- 提供用于安全集群的Socket層加密。
- 支持同步和異步持久化。
- 為Hibernate提供二級緩存Provider 。
- 通過JMX監(jiān)控和管理集群。
- 支持動(dòng)態(tài)HTTP Session集群。
- 利用備份實(shí)現(xiàn)動(dòng)態(tài)分割。
- 支持動(dòng)態(tài)故障恢復(fù)。
現(xiàn)在需要將它添加到Spring Boot項(xiàng)目中并開始使用它的優(yōu)勢。
<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應(yīng)用程序,只需要兩個(gè)依賴項(xiàng)。下我們需要配置Hazelcast實(shí)例。有兩種方法可以做到這一點(diǎn):
1. 通過Java配置。
2. 通過創(chuàng)建hazelcast.xml配置文件。
我們選擇第一個(gè)方式:
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; } }
實(shí)例已配置 - 現(xiàn)在我們可以訪問Hazelcast并使用數(shù)據(jù)進(jìn)行操作。
對于這個(gè)例子,將創(chuàng)建只有3個(gè)映射的HazelcastController:
- 一個(gè)是設(shè)置數(shù)據(jù);
- 一種是按ke鍵查詢數(shù)據(jù);
- 一個(gè)是從Hazelcast獲取所有數(shù)據(jù);
@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"); } }
在控制器中,我們自動(dòng)安裝了HazelcastInstance - 這是Hazelcast庫提供的接口。通過使用此實(shí)例,我們可以操作內(nèi)存數(shù)據(jù)網(wǎng)格中的數(shù)據(jù)。因此,可以使用Postman將一些記錄保存到Hazelcast中。
重要的是 - 即使從不同的SpringBoot應(yīng)用程序?qū)嵗龁?dòng),也可以將數(shù)據(jù)存儲(chǔ)在同一個(gè)緩存中。比如可以將應(yīng)用程序端口更改為8081,并運(yùn)行該應(yīng)用程序的另一個(gè)實(shí)例,然后將嘗試從之前存儲(chǔ)的Hazelcast中獲取所有數(shù)據(jù)。
因?yàn)镠azelcast是集群的,數(shù)據(jù)可以在許多應(yīng)用程序?qū)嵗g共享。
源碼:Github
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java返回文件時(shí)為圖片或pdf等設(shè)置在線預(yù)覽或下載功能
這篇文章主要介紹了Java返回文件時(shí)為圖片或pdf等設(shè)置在線預(yù)覽或下載功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01Java實(shí)現(xiàn)猜數(shù)字小游戲代碼
大家好,本篇文章主要講的是Java實(shí)現(xiàn)猜數(shù)字小游戲代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01基于Servlet實(shí)現(xiàn)技術(shù)問答網(wǎng)站系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于Servlet實(shí)現(xiàn)技術(shù)問答網(wǎng)站系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Java實(shí)現(xiàn)操作JSON的便捷工具類完整實(shí)例【重寫Google的Gson】
這篇文章主要介紹了Java實(shí)現(xiàn)操作JSON的便捷工具類,基于重寫Google的Gson實(shí)現(xiàn),涉及java針對json數(shù)據(jù)的各種常見轉(zhuǎn)換操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-10-10springboot整合日志處理Logback的實(shí)現(xiàn)示例
Logback是由log4j創(chuàng)始人設(shè)計(jì)的又一個(gè)開源日志組件,本文主要介紹了springboot整合日志處理Logback,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01IntelliJ?IDEA?2023.1.4?無法刷新Maven項(xiàng)目模塊的問題及解決方法
這篇文章主要介紹了如何排查?IDEA?自身報(bào)錯(cuò)問題,本文以IntelliJ?IDEA?2023.1.4無法刷新項(xiàng)目Maven模塊的問題為例,給大家詳細(xì)講解,需要的朋友可以參考下2023-08-08