springboot整合分布式緩存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. 通過JMX監控和管理集群。
  10. 支持動態HTTP Session集群。
  11. 利用備份實現動態分割。
  12. 支持動態故障恢復。

那么如何使用呢:

pom.xml

 <dependency>
            <groupId>com.hazelcast</groupId>
            <artifactId>hazelcast</artifactId>
        </dependency>
        <dependency>
            <groupId>com.hazelcast</groupId>
            <artifactId>hazelcast-spring</artifactId>
        </dependency>
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

配置類:

/**
 * @program: red-bag-activity->HazelcastConfiguration
 * @description:
 * @author: cxy
 * @create: 2019-12-31 12:13
 **/
@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;
    }
}

使用:

import com.hazelcast.core.HazelcastInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @program: red-bag-activity->HazelcastController
 * @description:
 * @author: cxy
 * @create: 2019-12-31 12:17
 **/
@RestController
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");
    }
}

啟動兩個實例:

第一個時候

啟動第二個實例:

 

 

第一個也會接受到:

 

 所以可以看到服務都是一樣:

再次的調用:

 

 

 

 在其中一個服務啟動端口8082,8083可以看到在8082上添加緩存,8083上查詢可以查詢到,說明數據是一個同步

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM