hazelcast入门教程_Hazelcast入门指南第2部分
hazelcast入門(mén)教程
本文是我開(kāi)始使用Hazelcast (分布式內(nèi)存數(shù)據(jù)庫(kù))的系列文章的繼續(xù)。 如果尚未閱讀第一篇文章,請(qǐng)單擊此處 。
分布式館藏
Hazelcast具有許多可用于存儲(chǔ)數(shù)據(jù)的分布式集合。 以下是它們的列表:
- 清單
- 我設(shè)置
- 隊(duì)列
清單
IList是一個(gè)集合,它保持放入內(nèi)容的順序,并且可以重復(fù)。 實(shí)際上,它實(shí)現(xiàn)了java.util.List接口。 這不是線程安全的,必須使用某種互斥或鎖定來(lái)控制許多線程的訪問(wèn)。 我建議Hazelcast的ILock。
我設(shè)置
ISet是一個(gè)集合, 它不會(huì)保持放置在其中的項(xiàng)目的順序。 但是,這些元素是獨(dú)特的。 此集合實(shí)現(xiàn)java.util.Set接口。 與ILists一樣,此集合也不是線程安全的。 我建議再次使用ILock。
隊(duì)列
IQueue是一個(gè)集合,用于保持進(jìn)來(lái)順序并允許重復(fù)項(xiàng)。 它實(shí)現(xiàn)了java.util.concurrent.BlockingQueue,因此是線程安全的。 這是集合中擴(kuò)展性最強(qiáng)的,因?yàn)槠淙萘侩S實(shí)例數(shù)量的增加而增加。 例如,假設(shè)一個(gè)隊(duì)列限制為10個(gè)項(xiàng)目。 一旦隊(duì)列已滿,除非再有另一個(gè)Hazelcast實(shí)例出現(xiàn),否則將無(wú)法再進(jìn)入那里,那么還有10個(gè)可用空間。 還制作了隊(duì)列的副本。 IQueues也可以通過(guò)實(shí)現(xiàn)QueueStore接口來(lái)持久化。
他們有什么共同點(diǎn)
它們?nèi)齻€(gè)都實(shí)現(xiàn)了ICollection接口。 這意味著可以向其中添加一個(gè)ItemListener。 這可以讓您知道何時(shí)添加或刪除項(xiàng)目。 在“示例”部分中提供了一個(gè)示例。
可擴(kuò)展性
隨著可伸縮性的發(fā)展,在Hazelcast 3.x中,ISet和IList的性能不佳。 這是因?yàn)閷?shí)現(xiàn)已從基于地圖變?yōu)樵贛ultiMap中成為集合。 這意味著它們不會(huì)分區(qū),也不會(huì)超出一臺(tái)計(jì)算機(jī)。 剝離館藏可以走很長(zhǎng)一段路,也可以基于強(qiáng)大的IMap自己制造館藏。 另一種方法是實(shí)現(xiàn)Hazelcast的spi。
例子
這是ISet,IList和IQueue的示例。 他們?nèi)齻€(gè)都有一個(gè)ItemListener。 ItemListener已添加到hazelcast.xml配置文件中。 也可以通過(guò)編程方式為那些傾斜的人添加一個(gè)ItemListener。 將顯示一個(gè)主類(lèi)和配置該集合的配置文件片段。
CollectionItemListener
我實(shí)現(xiàn)了ItemListener接口,以顯示所有三個(gè)集合都可以具有ItemListener。 這是實(shí)現(xiàn):
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()); }}我設(shè)置
碼
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); }}組態(tài)
<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(“l(fā)ist”); list.add(“Once”); list.add(“upon”); list.add(“a”); list.add(“time”);IList<String> list2 = instance2.getList(“l(fā)ist”); for(String s: list2) { System.out.println(s); } System.exit(0); }}組態(tài)
<list name=”list”> <item-listeners> <item-listener include-value=”true”>hazelcastcollections.CollectionItemListener</item-listener> </item-listeners> </list>隊(duì)列
碼
我將這一點(diǎn)留在了最后,因?yàn)槲疫€實(shí)現(xiàn)了一個(gè)QueueStore。 在IQueue上沒(méi)有調(diào)用來(lái)添加QueueStore。 必須在hazelcast.xml文件中對(duì)其進(jìn)行配置。
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); }}隊(duì)列存儲(chǔ)代碼
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(“l(fā)oading ” + l); return “”; }@Override public Map<Long, String> loadAll(Collection<Long> clctn) { System.out.println(“l(fā)oadAll”); Map<Long, String> retMap = new TreeMap<>(); return retMap; }@Override public Set<Long> loadAllKeys() { System.out.println(“l(fā)oadAllKeys”); return new TreeSet<>(); }}組態(tài)
在配置QueueStore時(shí)需要解決一些提及。 有三個(gè)屬性沒(méi)有傳遞給實(shí)現(xiàn)。 二進(jìn)制屬性處理Hazelcast如何將數(shù)據(jù)發(fā)送到商店。 通常,Hazelcast將序列化的數(shù)據(jù)存儲(chǔ)并反序列化,然后再發(fā)送到QueueStore。 如果該屬性為true,則將數(shù)據(jù)串行發(fā)送。 默認(rèn)值為false。 內(nèi)存限制是在放入QueueStore之前在內(nèi)存中保留多少個(gè)條目。 10000個(gè)內(nèi)存限制意味著將第10001個(gè)發(fā)送到QueueStore。 在初始化IQueue時(shí),正在從QueueStore加載條目。 bulk-load屬性是一次可以從QueueStore中拉出多少個(gè)。
<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>結(jié)論
我希望有人能了解Hazelcast內(nèi)部的分布式館藏。 討論了ISet,IList和IQueue。 ISet和IList僅保留在IQueue進(jìn)行復(fù)制時(shí)創(chuàng)建的實(shí)例上,并且可以保留,并且其容量隨著實(shí)例數(shù)量的增加而增加。 該代碼可以在這里看到。
參考資料
《榛子之書(shū)》: www.hazelcast.com
Hazelcast文檔(hazelcast 下載隨附)
翻譯自: https://www.javacodegeeks.com/2014/10/beginners-guide-to-hazelcast-part-2.html
hazelcast入門(mén)教程
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的hazelcast入门教程_Hazelcast入门指南第2部分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 联想m340e主板插电脑(联想e40笔记
- 下一篇: null导入失败_当null检查非常失败