固安县城乡和住房建设局网站,科技公司手机端网站,凡科建站小程序制作,网站自然排名怎么做本文是我开始以Hazelcast #xff08;分布式内存数据库#xff09;为特色的系列文章的继续。 如果尚未阅读第一篇文章#xff0c;请单击此处 。 分布式馆藏 Hazelcast具有许多可用于存储数据的分布式集合。 以下是它们的列表#xff1a; 清单 我设置 队列 清单 IList是… 本文是我开始以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。 例子 这是ISetIList和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();
ISetString set instance.getSet(“set”);
set.add(“Once”);
set.add(“upon”);
set.add(“a”);
set.add(“time”);ISetString 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();
IListString list instance.getList(“list”);
list.add(“Once”);
list.add(“upon”);
list.add(“a”);
list.add(“time”);IListString 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();
IQueueString queue instance.getQueue(“queue”);
queue.add(“Once”);
queue.add(“upon”);
queue.add(“a”);
queue.add(“time”);IQueueString 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 QueueStoreString {Override
public void store(Long l, String t) {
System.out.println(“storing ” t ” with ” l);
}Override
public void storeAll(MapLong, String map) {
System.out.println(“store all”);
}Override
public void delete(Long l) {
System.out.println(“removing ” l);
}Override
public void deleteAll(CollectionLong clctn) {
System.out.println(“deleteAll”);
}Override
public String load(Long l) {
System.out.println(“loading ” l);
return “”;
}Override
public MapLong, String loadAll(CollectionLong clctn) {
System.out.println(“loadAll”);
MapLong, String retMap new TreeMap();
return retMap;
}Override
public SetLong 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-size10/max-size
item-listeners
item-listener include-value”true”hazelcastcollections.CollectionItemListener/item-listener
/item-listeners
queue-store
class-namehazelcastcollections.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内部的分布式馆藏。 讨论了ISetIList和IQueue。 ISet和IList仅保留在创建IQueue的副本时创建的实例上并且可以保留并且其容量随着实例数量的增加而增加。 该代码可以在这里看到。 参考文献 《榛子之书》 www.hazelcast.com Hazelcast文档hazelcast 下载随附 翻译自: https://www.javacodegeeks.com/2014/10/beginners-guide-to-hazelcast-part-2.html