日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hazelcast入门指南第2部分

發(fā)布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hazelcast入门指南第2部分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文是我開始以Hazelcast (分布式內存數(shù)據(jù)庫)為特色的系列文章的繼續(xù)。 如果尚未閱讀第一篇文章,請單擊此處 。

分布式館藏

Hazelcast具有許多可用于存儲數(shù)據(jù)的分布式集合。 以下是它們的列表:

  • 清單
  • 我設置
  • 隊列

清單

IList是一個集合,它保持放入內容的順序,并且可以重復。 實際上,它實現(xiàn)了java.util.List接口。 這不是線程安全的,必須使用某種互斥或鎖定來控制許多線程的訪問。 我建議Hazelcast的ILock。

我設置

ISet是一個集合, 它不會保持放置在其中的項目的順序。 但是,這些元素是獨特的。 此集合實現(xiàn)java.util.Set接口。 與ILists一樣,此集合也不是線程安全的。 我建議再次使用ILock。

隊列

IQueue是一個集合,用于保持進來順序并允許重復項。 它實現(xiàn)了java.util.concurrent.BlockingQueue,因此線程安全的。 這是集合中擴展性最強的,因為其容量隨著實例數(shù)量的增加而增加。 例如,假設一個隊列限制為10個項目。 一旦隊列已滿,除非再有另一個Hazelcast實例出現(xiàn),否則將無法再進入那里,那么還有10個可用空間。 還制作了隊列的副本。 IQueues也可以通過實現(xiàn)QueueStore接口來持久化。

他們有什么共同點

它們三個都實現(xiàn)了ICollection接口。 這意味著可以向其中添加一個ItemListener。 這可以讓您知道何時添加或刪除項目。 在“示例”部分中提供了一個示例。

可伸縮性

隨著可伸縮性的發(fā)展,在Hazelcast 3.x中,ISet和IList的性能不佳。 這是因為實現(xiàn)已從基于地圖變?yōu)樵贛ultiMap中成為集合。 這意味著它們不會分區(qū),也不會超出一臺計算機。 剝離館藏可以走很長一段路,也可以基于強大的IMap自己制造館藏。 另一種方法是實現(xiàn)Hazelcast的spi。

例子

這是ISet,IList和IQueue的示例。 他們三個都有一個ItemListener。 ItemListener已添加到hazelcast.xml配置文件中。 人們還可以通過編程方式為那些傾斜的人添加一個ItemListener。 將顯示一個主類和配置該集合的配置文件片段。

CollectionItemListener

我實現(xiàn)了ItemListener接口,以顯示所有三個集合都可以具有ItemListener。 這是實現(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()); }}

我設置

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>

隊列

我將這一點留在了最后,因為我還實現(xiàn)了一個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(“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時需要解決一些提及。 有三個屬性沒有傳遞給實現(xiàn)。 二進制屬性處理Hazelcast如何將數(shù)據(jù)發(fā)送到商店。 通常,Hazelcast將序列化的數(shù)據(jù)存儲并反序列化,然后再發(fā)送到QueueStore。 如果該屬性為true,則將數(shù)據(jù)序列化發(fā)送。 默認為false。 內存限制是在放入QueueStore之前在內存中保留多少個條目。 10000個內存限制意味著將第10001個發(fā)送到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僅保留在創(chuàng)建IQueue的副本時創(chuàng)建的實例上,并且可以保留,并且其容量隨著實例數(shù)量的增加而增加。 該代碼可以在這里看到。

參考文獻

《榛子之書》: www.hazelcast.com

Hazelcast文檔(hazelcast 下載隨附)

翻譯自: https://www.javacodegeeks.com/2014/10/beginners-guide-to-hazelcast-part-2.html

總結

以上是生活随笔為你收集整理的Hazelcast入门指南第2部分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。