您好,登錄后才能下訂單哦!
本篇文章為大家展示了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; } }
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 } }
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()); } }
public class TopicListener implements MessageListener<String> { @Override public void onMessage(Message<String> message) { String msg=message.getMessageObject(); System.out.println("收到Topic消息:"+msg); } }
這兩個我就沒寫在實際代碼中,在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()); } }
這個時候啟動項目顯示如下:
當前只有一個節點,端口為: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整合是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。