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部分相关推荐

  1. hazelcast入门教程_Hazelcast入门指南第6部分

    hazelcast入门教程 这是有关Hazelcast的一系列文章中的第六篇. 如果一个人没有看过过去的五年,请到表中的内容后 ,我创建赶上. 本地客户 在上一篇文章之后,我决定要去本地化. 是的,我 ...

  2. hazelcast入门教程_Hazelcast入门指南第4部分

    hazelcast入门教程 这是我的Hazelcast系列的第四部分. 如果一个人没有看到其他三个人,我建议一个人去看第1 部分 , 第2 部分和第3部分 . 记录中 日志记录是任何应用程序的重要功能 ...

  3. hazelcast入门教程_Hazelcast入门指南第3部分

    hazelcast入门教程 这是从初学者的角度来看一系列有关如何使用Hazelcast的文章的延续. 如果您还没有阅读最后两个,我鼓励阅读它们: Hazelcast入门指南第1部分 Hazelcast ...

  4. hazelcast入门教程_Hazelcast入门指南第7部分

    hazelcast入门教程 这是解释如何使用Hazelcast的系列文章的续篇. 如果一个人没有阅读其他六个帖子,请转到目录并阅读其他帖子. 不同的地图种类 Hazelcast的MultiMap打破了 ...

  5. hazelcast入门教程_Hazelcast入门指南第5部分

    hazelcast入门教程 这是我撰写的有关Hazelcast的一系列文章的延续. 我强烈建议您阅读其他内容: 第1 部分 , 第2 部分 , 第3 部分和第4部分 . 一气呵成的东西 这篇文章中没有 ...

  6. hazelcast入门教程_Hazelcast入门

    hazelcast入门教程 7月,我写了一个博客向Java开发人员介绍erlang,重点介绍了这两种语言之间的一些异同. erlang虚拟机具有许多令人印象深刻的内置功能,其中之一是它们独立于位置且可 ...

  7. 基金投资入门教程-----基金入门

    基金投资入门教程-----基金入门 基金投资入门教程-----基金入门 1.基金入门 什么是基金 基金的三大优势 基金的风险 基金投资入门教程-----基金入门 1.基金入门 什么是基金 基金的三大优 ...

  8. 计算机linux入门教程,Turbolinux入门教程1

    原标题:Turbolinux入门教程1 第一课:什么是Linux 简单地说, Linux 是一套免费使用和自由传播的类 Unix 操作系统,它主要用于基于 Intel x86 系列 CPU 的计算机上 ...

  9. python入门教程pdf-Python入门教程详解.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython Python入门教程详解.pdf132页 本文档一 ...

最新文章

  1. 【面向对象编程】(2) 类属性的定义及使用;__repr__()方法
  2. HDU 1501 Zipper
  3. 虚拟机实现二层交换机_局域网SDN技术硬核内幕 5 虚拟化网络的实现
  4. spring之java配置(springboot推荐的配置方式)
  5. 【云隐】STM32F103C8T6实现串口IAP方式升级固件
  6. SaaS模式云数据仓库:持续保护云上数据及服务安全
  7. 一线互联网公司的工程师们更应该增长技术以外的职场经验
  8. nginx配置静态资源允许跨域访问
  9. 马斯克称下一代超级工厂占地可能没必要更大 但可能更先进
  10. c++删除文件delete_开启phpstudy中apache的put和delete请求方法并进行测试
  11. 鼠标触碰元素时变为其它各种形状
  12. centos7上mycat安装_Mysql+Mycat实现数据库主从同步与读写分离
  13. java sigar 远程_Java运用第三方开源jar包sigar.jar获取服务器信息
  14. 工程电磁场复习基本知识点
  15. 5分钟快速安装ASP.NET Core 网站运行环境
  16. 您的组织策略阻止我们为您完成此操作。有关详细信息,请联系技术支持。
  17. Flash闪存储存原理以及NAND flash、NOR flash(详细)对比总结
  18. 我用Python爬取了李沧最近一年多的二手房成交数据得出以下结论
  19. 移动机器人全覆盖路径规划及仿真(三.地图分割)
  20. .md文件转.pdf文件

热门文章

  1. nssl1454-最短路【并查集,贪心】
  2. P1344-[USACO4.4]追查坏牛奶Pollutant Control【网络流,最小割】
  3. 【启发式合并】梦幻布丁(金牌导航 启发式合并-1/luogu 3201)
  4. 【图论】【最短路】【Dijkstra】最小花费(ssl 2206/luogu 1576)
  5. Redis 再牛逼,也得设置密码
  6. 什么是线程安全,你真的了解吗
  7. 面试过程中千万不要犯这 5 点低级错误
  8. Redis进阶之内存模型
  9. 程序员如何写简历?来自硅谷的八条建议
  10. 分库分表的事务处理机制