Hazelcast入门指南第2部分

本文是我开始以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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防止DISCUZ根域名跳转到forum.php的方法

症状&#xff1a;输入http://www.sn03.com/跳转到www.cn03.com/forum.php&#xff0c;这样有两个不好&#xff0c;1、用户复制时不利于传播&#xff0c;2、两个页面内容的重复对搜索引擎排名不利&#xff0c;如何取消这个呢&#xff1f; 全局-域名设置-应用域名-默认&#xff1…

Hazelcast入门指南第1部分

介绍 我将在Hazelcast上做一个系列。 我从Twitter了解了该产品。 他们决定跟随我&#xff0c;经过对他们所做工作的研究后&#xff0c;我决定跟随他们。 我在推特上说&#xff0c;Hazelcast将是分布式密码破解者的重要Struts。 这引起了一些兴趣&#xff0c;我决定加入一个。 H…

Vue 组件与复用

&#xff08;1&#xff09;全局注册 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><title>Vue</title></head><body><div id"app"><my-component></my-compone…

js笔记(二)数组、对象、this

大标题小节一、数组1. 数组的创建、赋值、分类&#xff1b;2. 数组的简单操作&#xff08;根据索引增、查、改&#xff09;&#xff1b;3. 声明式和构造函数创建的数组的区别&#xff1b;4.数组的方法&#xff1a;push()、unshift()、splice()、pop()、shift()、slice()、sort(…

Oracle SYSAUX 表空间 说明

一. SYSAUX 说明 在Oracle 10g 版本中&#xff0c;引入了SYSTEM表空间的一个辅助表空间&#xff1a; SYSAUX表空间。 SYSAUX 表空间存放一些其他的metadata组件&#xff0c;如OEM,Streams 等会默认存放在SYSAUX表空间里。这样也能降低SYSTEM表空间的负载。 因此SYSAUX 表空间也…

JAXB –新手的观点,第2部分

在本系列的第1部分中&#xff0c;我讨论了使用JAXB和JPA将数据从XML文件加载到数据库中的基础知识。 &#xff08;如果需要使用JSON而不是XML&#xff0c;则相同的想法应转化为类似Jackson的工具。&#xff09;该方法是使用共享域对象-即&#xff0c;一组带有描述XML映射和关系…

[C++Primer] 第二章 变量和基本类型

第二章 变量和基本类型 引用 引用定义的时候必须初始化。引用初始化之后无法重新绑定到其它对象上。引用本身并不是对象&#xff0c;所以没有指向引用的引用&#xff08;不管如何多层引用&#xff0c;引用的还是源对象&#xff09;下面用一个简单的例子说明&#xff1a; int a1…

VUE v-bind绑定class和style

1、绑定class &#xff08;1&#xff09;对象语法 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><title>vue示例</title></head><body><div id"app"><div class&quo…

js笔记(四)内置对象Math和Date()、浏览器对象模型BOM

大标题小标题备注一、内置对象Math、Date()1. Math 数学对象;2. Date() 日期对象;常用的数学对象&#xff1a;Math.PI、abs(n)、round(n)、random()、floor(n)、ceil(n)、pow(x,y)、sqrt(n)、min(3,4,5,6)、max()、sin(弧度)、cos()、tan()&#xff1b;获取日期&#xff1a;get…

ListView展示SIM信息

首先看一下程序运行后的图片&#xff1a; 在开始写代码之前&#xff0c;看展示下程序的结构&#xff1a; 下面开始代码, 第一步&#xff0c;主程序代码&#xff1a; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundl…

MQ

https://mp.weixin.qq.com/s/AFjYLtqGXkOVHcETePBHBw https://mp.weixin.qq.com/s/5pPjUOfAH6IN7cXMgMvoKw转载于:https://www.cnblogs.com/codeLei/p/11052781.html

代理的JavaOne 2014观察

我今年无法参加JavaOne&#xff0c;但很高兴看到一些在线资源涵盖了JavaOne 2014的活动。在本文中&#xff0c;我总结了JavaOne 2014的一些观察结果&#xff0c;并提供了指向提供这些观察结果的参考的链接。提供有关这些观察的更多背景细节。 列出的观察结果没有特定的顺序&…

push和unshift方法

push和unushift都是向数组插入元素。 push是向数组尾部插入元素。 unshift是向数组头部插入元素。 共同点&#xff1a;都可以一次插入多个元素。 arrayObject.push(newelement1,newelement2,....,newelementX) arrayObject.unshift(newelement1,newelement2,....,newelement…

js笔记(五)文档对象模型DOM

大标题小节一、DOM选择器1. id 选择器&#xff1a;getElementById("id名")&#xff1b;2. class 选择器&#xff1a;getElementByClassName("class名")&#xff1b;3. 标签选择器&#xff1a;getElementsByTagName("标签名")&#xff1b;4. name…

星期五基准功能Java

让我们的产品负责人想象一下有一天会发疯&#xff0c;并要求您执行以下操作&#xff1a; From a set of Strings as follows : “ marco_8”&#xff0c;“ john_33”&#xff0c;“ marco_1”&#xff0c;“ john_33”&#xff0c;“ thomas_5”&#xff0c;“ john_33”&am…

SEO优化实践操作

合理的title、description、keywords&#xff1a;搜索对着三项的权重逐个减小&#xff0c;title值强调重点即可&#xff0c;重要关键词出现不要超过2次&#xff0c;而且要靠前&#xff0c;不同页面title要有所不同&#xff1b;description把页面内容高度概括&#xff0c;长度合…

Flot画实时曲线

源代码&#xff1a; <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>深海的小鱼编制-PLOT</title> <script language"javascript" type"text/javascript" src"…

RHQ指标的WildFly子系统

对于RHQ-Metrics&#xff0c;我已经开始为WildFly 8编写一个子系统&#xff0c;该子系统能够在WildFly内收集指标&#xff0c;然后以固定的时间间隔&#xff08;当前为每分钟&#xff09;将其发送到RHQ-Metrics服务器。 下一张图是该发件人连续运行1.5天时结果的可视化效果的G…

Linux下实现客户端和服务器端的通信

首先&#xff0c;可以将代码复制下来放到U盘里&#xff0c;然后挂载到Linux上 挂载步骤 找到设备->USB->你U盘的名字 挂载成功 访问U盘把代码拷贝到home文件夹下&#xff0c;就可以直接进行编译。 client.c #include <stdio.h> #include <unistd.h>#include…

gvim 安装 taglist

gvim 安装 taglist windows XP下&#xff0c;gvim,安装taglisttaglist 是在vim 下可以像 vc当中的可以列出类&#xff0c;函数 的插件。一&#xff0c;下载ctags,将其中的 ctags.exe 复制到gvim.exe 所在的目录&#xff0c;我的是 C:\Program Files\Vim\vim73如果不复制的话&am…