你是否遇到過應用程式性能下降的問題?有沒有想過提升Spring性能?如果是這樣 - 那麼這篇文章絕對适合你。在這裡,我們将談論使用超級強大和領先的記憶體資料網格提高應用程式的性能!
什麼是Hazelcast?
Hazelcast是一個記憶體分布式計算平台,用于管理資料并并行執行執行應用程式。
1. 它是用Java編寫的。
2. 與其他一些記憶體資料庫(如redis)不同,Hazelcast是多線程的,這意味着可從所有可用的CPU核心中受益。
3. 與其他記憶體資料網格不同 - 它設計用于分布式環境。它支援每個群集無限數量的map和緩存。
根據基準測試,Hazelcast在擷取資料方面比Redis快56%,在設定資料方面比Redis快44%。
現在需要将它添加到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配置檔案。
我們選擇第一個方式:
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(new 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是叢集的,資料可以在許多應用程式執行個體之間共享。
源碼:
https://github.com/igorkosandyak/spring-boot-with-hazelcast