中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring boot與內存數據庫Hazelcast整合是怎樣的

發布時間:2021-10-21 10:38:55 來源:億速云 閱讀:277 作者:柒染 欄目:大數據

本篇文章為大家展示了spring boot與內存數據庫Hazelcast整合是怎樣的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

前言

spring boot 在此就不多做介紹了,想來大家對他應該都不陌生了

Hazelcast 可能大家就畢竟陌生了:

  • 簡單易用
    Hazelcast是用Java編寫的,沒有其他依賴關系。只需簡單的把jar包引入項目的classpath即可創建集群。

  • 無主從模式
    與許多NoSQL解決方案不同,Hazelcast節點是點對點的。沒有主從關系; 所有成員都存儲相同數量的數據,并進行相等的處理,避免了單點故障。

  • 彈性可擴展
    Hazelcast旨在擴展成千上萬的成員。新成員啟動,將自動發現群集,并線性增加存儲和處理能力。成員之間通過TCP保持連接和通訊。

  • 讀寫快速高效
    Hazelcast所有數據都存儲在內存中,提供基于內存快速高效的讀寫能力。

PS:另外就是——根據基準測試,Hazelcast在獲取數據方面比Redis快56%,在設置數據方面比Redis快44%。 

用例

下面主要是講講springboot和Hazelcast的整合,并給出Hazelcast支持的數據類型MAP、List、Topic、Queue給出了使用實例。

整合配置:

@Configuration
public class HazelcastConfig {
	@Bean
	public Config config() {
		Config config = new Config();
		GroupConfig gc=new GroupConfig(Const.HAZELCAST_NAME);//解決同網段下,不同庫項目
		
		config.setInstanceName("hazelcast-instance")
				.addMapConfig(new MapConfig().setName("configuration")
				.setMaxSizeConfig(new MaxSizeConfig(2000, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
				.setEvictionPolicy(EvictionPolicy.LRU).setTimeToLiveSeconds(-1))
				.setGroupConfig(gc);
		return config;
	}
	
	@Bean
	public HazelcastInstance hazelcastInstance(Config config) {
		HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance(config); 
		//分布式map監聽
		IMap<Object, Object> imap = hzInstance.getMap(Const.MAP_NAME);
		imap.addLocalEntryListener(new IMapListener());
		//攔截器(沒寫內容)
		imap.addInterceptor(new IMapInterceptor());
		//發布/訂閱模式
		ITopic<String> topic = hzInstance.getTopic(Const.TOPIC_NAME); 
		topic.addMessageListener(new TopicListener());
		
		return hzInstance;
	}
}

map數據變化的攔截器實現:

public class IMapInterceptor implements MapInterceptor{

	private static final long serialVersionUID = 3556808830046436753L;

	@Override
	public Object interceptGet(Object value) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void afterGet(Object value) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Object interceptPut(Object oldValue, Object newValue) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void afterPut(Object value) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Object interceptRemove(Object removedValue) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void afterRemove(Object oldValue) {
		// TODO Auto-generated method stub
		
	}
}

map數據變化的監聽器實現:

public class IMapListener implements EntryAddedListener<String, String>{

	@Override
	public void entryAdded(EntryEvent<String, String> event) {
		// TODO Auto-generated method stub
		//干你監聽的操作
		System.out.println("MAP分布式監聽:"+event.getValue());
	}

}

Topic訂閱接收消息:

public class TopicListener implements MessageListener<String> {
	
	@Override
	public void onMessage(Message<String> message) {
		String msg=message.getMessageObject();
		System.out.println("收到Topic消息:"+msg);
	}
}

List和Queue的實例

這兩個我就沒寫在實際代碼中,在test寫了2個main方法

//生產數據
public class HazelcastGetStartServerMaster {
    public static void main(String[] args) {
        // 創建一個 hazelcastInstance實例
        HazelcastInstance instance = Hazelcast.newHazelcastInstance();
        // 創建集群Map
        IList<Object> clusterMap = instance.getList("myList");
        clusterMap.add("list0");
        clusterMap.add("list1");

        // 創建集群Queue
        Queue<String> clusterQueue = instance.getQueue("MyQueue");
        clusterQueue.offer("Hello hazelcast!");
        clusterQueue.offer("Hello hazelcast queue!");
    }
}
//消費數據
public class HazelcastGetStartServerSlave {
    public static void main(String[] args) {
        //創建一個 hazelcastInstance實例
        HazelcastInstance instance = Hazelcast.newHazelcastInstance();
        IList<Object> clusterList = instance.getList("myList");
        Queue<String> clusterQueue = instance.getQueue("MyQueue");
        
        System.out.println("Map Value:" + clusterList.get(1));
        System.out.println("Queue Size :" + clusterQueue.size());
        System.out.println("Queue Value 1:" + clusterQueue.poll());
        System.out.println("Queue Value 2:" + clusterQueue.poll());
        System.out.println("Queue Size :" + clusterQueue.size());
    }
}

這個時候啟動項目顯示如下:

spring boot與內存數據庫Hazelcast整合是怎樣的

當前只有一個節點,端口為:5701

這個時候寫個main方法測試分布式map:

public class IMapTest {
	public static void main(String[] args) {
		Config config = new Config();
		GroupConfig gc=new GroupConfig(Const.HAZELCAST_NAME);
		config.setGroupConfig(gc);
		HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance(config); 
		
		IMap<String, String> imap = hzInstance.getMap(Const.MAP_NAME);
		imap.put("myKey", "myObject");
    }
}

運行main方法發現原來啟動的項目找那個Member變成了2個,因為main方法中也啟動了一個Hazelcast實例加入了集群中。imap的攔截器,我監聽器都生效了。并獲取到了main方法中加的數據,因為Hazelcast是集群的,數據可以在許多應用程序實例之間共享。

上述內容就是spring boot與內存數據庫Hazelcast整合是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

门头沟区| 夏邑县| 阜新市| 台南县| 雅江县| 如东县| 当雄县| 浪卡子县| 泉州市| 岳池县| 会东县| 三亚市| 建德市| 桃源县| 荆门市| 黑山县| 三都| 新宁县| 静安区| 神池县| 吉隆县| 钟山县| 汤原县| 广安市| 甘肃省| 宝坻区| 卢氏县| 多伦县| 嘉禾县| 宁夏| 肥东县| 甘孜县| 开远市| 威宁| 柯坪县| 新宾| 东山县| 绥宁县| 萍乡市| 吉林省| 浑源县|