hazelcast入门教程_Hazelcast入门指南第2部分
hazelcast入門教程
本文是我開始使用Hazelcast (分布式內存數據庫)的系列文章的繼續。 如果尚未閱讀第一篇文章,請單擊此處 。
分布式館藏
 Hazelcast具有許多可用于存儲數據的分布式集合。 以下是它們的列表: 
- 清單
 - 我設置
 - 隊列
 
清單
IList是一個集合,它保持放入內容的順序,并且可以重復。 實際上,它實現了java.util.List接口。 這不是線程安全的,必須使用某種互斥或鎖定來控制許多線程的訪問。 我建議Hazelcast的ILock。
我設置
ISet是一個集合, 它不會保持放置在其中的項目的順序。 但是,這些元素是獨特的。 此集合實現java.util.Set接口。 與ILists一樣,此集合也不是線程安全的。 我建議再次使用ILock。
隊列
IQueue是一個集合,用于保持進來順序并允許重復項。 它實現了java.util.concurrent.BlockingQueue,因此是線程安全的。 這是集合中擴展性最強的,因為其容量隨實例數量的增加而增加。 例如,假設一個隊列限制為10個項目。 一旦隊列已滿,除非再有另一個Hazelcast實例出現,否則將無法再進入那里,那么還有10個可用空間。 還制作了隊列的副本。 IQueues也可以通過實現QueueStore接口來持久化。
他們有什么共同點
它們三個都實現了ICollection接口。 這意味著可以向其中添加一個ItemListener。 這可以讓您知道何時添加或刪除項目。 在“示例”部分中提供了一個示例。
可擴展性
隨著可伸縮性的發展,在Hazelcast 3.x中,ISet和IList的性能不佳。 這是因為實現已從基于地圖變為在MultiMap中成為集合。 這意味著它們不會分區,也不會超出一臺計算機。 剝離館藏可以走很長一段路,也可以基于強大的IMap自己制造館藏。 另一種方法是實現Hazelcast的spi。
例子
這是ISet,IList和IQueue的示例。 他們三個都有一個ItemListener。 ItemListener已添加到hazelcast.xml配置文件中。 也可以通過編程方式為那些傾斜的人添加一個ItemListener。 將顯示一個主類和配置該集合的配置文件片段。
CollectionItemListener
我實現了ItemListener接口,以顯示所有三個集合都可以具有ItemListener。 這是實現:
package hazelcastcollections;import com.hazelcast.core.ItemEvent; import com.hazelcast.core.ItemListener;/** * * @author Daryl */ public class CollectionItemListener implements ItemListener {@Override public void itemAdded(ItemEvent ie) { System.out.println(“ItemListener – itemAdded: ” + ie.getItem()); }@Override public void itemRemoved(ItemEvent ie) { System.out.println(“ItemListener – itemRemoved: ” + ie.getItem()); }}我設置
碼
package hazelcastcollections.iset;import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.ISet;/** * * @author Daryl */ public class HazelcastISet {/** * @param args the command line arguments */ public static void main(String[] args) { HazelcastInstance instance = Hazelcast.newHazelcastInstance(); HazelcastInstance instance2 = Hazelcast.newHazelcastInstance(); ISet<String> set = instance.getSet(“set”); set.add(“Once”); set.add(“upon”); set.add(“a”); set.add(“time”);ISet<String> set2 = instance2.getSet(“set”); for(String s: set2) { System.out.println(s); }System.exit(0); }}組態
<set name=”set”> <item-listeners> <item-listener include-value=”true”>hazelcastcollections.CollectionItemListener</item-listener> </item-listeners> </set>清單
碼
package hazelcastcollections.ilist;import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IList;/** * * @author Daryl */ public class HazelcastIlist {/** * @param args the command line arguments */ public static void main(String[] args) { HazelcastInstance instance = Hazelcast.newHazelcastInstance(); HazelcastInstance instance2 = Hazelcast.newHazelcastInstance(); IList<String> list = instance.getList(“list”); list.add(“Once”); list.add(“upon”); list.add(“a”); list.add(“time”);IList<String> list2 = instance2.getList(“list”); for(String s: list2) { System.out.println(s); } System.exit(0); }}組態
<list name=”list”> <item-listeners> <item-listener include-value=”true”>hazelcastcollections.CollectionItemListener</item-listener> </item-listeners> </list>隊列
碼
我將這一點留在了最后,因為我還實現了一個QueueStore。 在IQueue上沒有調用來添加QueueStore。 必須在hazelcast.xml文件中對其進行配置。
package hazelcastcollections.iqueue;import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IQueue;/** * * @author Daryl */ public class HazelcastIQueue {/** * @param args the command line arguments */ public static void main(String[] args) { HazelcastInstance instance = Hazelcast.newHazelcastInstance(); HazelcastInstance instance2 = Hazelcast.newHazelcastInstance(); IQueue<String> queue = instance.getQueue(“queue”); queue.add(“Once”); queue.add(“upon”); queue.add(“a”); queue.add(“time”);IQueue<String> queue2 = instance2.getQueue(“queue”); for(String s: queue2) { System.out.println(s); }System.exit(0); }}隊列存儲代碼
package hazelcastcollections.iqueue;import com.hazelcast.core.QueueStore; import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; /** * * @author Daryl */ public class QueueQStore implements QueueStore<String> {@Override public void store(Long l, String t) { System.out.println(“storing ” + t + ” with ” + l); }@Override public void storeAll(Map<Long, String> map) { System.out.println(“store all”); }@Override public void delete(Long l) { System.out.println(“removing ” + l); }@Override public void deleteAll(Collection<Long> clctn) { System.out.println(“deleteAll”); }@Override public String load(Long l) { System.out.println(“loading ” + l); return “”; }@Override public Map<Long, String> loadAll(Collection<Long> clctn) { System.out.println(“loadAll”); Map<Long, String> retMap = new TreeMap<>(); return retMap; }@Override public Set<Long> loadAllKeys() { System.out.println(“loadAllKeys”); return new TreeSet<>(); }}組態
在配置QueueStore時需要解決一些提及。 有三個屬性沒有傳遞給實現。 二進制屬性處理Hazelcast如何將數據發送到商店。 通常,Hazelcast將序列化的數據存儲并反序列化,然后再發送到QueueStore。 如果該屬性為true,則將數據串行發送。 默認值為false。 內存限制是在放入QueueStore之前在內存中保留多少個條目。 10000個內存限制意味著將第10001個發送到QueueStore。 在初始化IQueue時,正在從QueueStore加載條目。 bulk-load屬性是一次可以從QueueStore中拉出多少個。
<queue name=”queue”> <max-size>10</max-size> <item-listeners> <item-listener include-value=”true”>hazelcastcollections.CollectionItemListener</item-listener> </item-listeners> <queue-store> <class-name>hazelcastcollections.iqueue.QueueQStore</class-name> <properties> <property name=”binary”>false</property> <property name=”memory-limit”>10000</property> <property name=”bulk-load”>500</property> </properties> </queue-store> </queue>結論
我希望有人能了解Hazelcast內部的分布式館藏。 討論了ISet,IList和IQueue。 ISet和IList僅保留在IQueue進行復制時創建的實例上,并且可以保留,并且其容量隨著實例數量的增加而增加。 該代碼可以在這里看到。
參考資料
《榛子之書》: www.hazelcast.com
Hazelcast文檔(hazelcast 下載隨附)
翻譯自: https://www.javacodegeeks.com/2014/10/beginners-guide-to-hazelcast-part-2.html
hazelcast入門教程
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的hazelcast入门教程_Hazelcast入门指南第2部分的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 联想m340e主板插电脑(联想e40笔记
 - 下一篇: 卖家电脑淘宝上传宝贝教程(淘宝卖家版如何