hazelcast初探

Hazelcast作为一个高度可扩展的数据分发和集群平台,提供了高效的、可扩展的分布式数据存储、数据缓存。Hazelcast是开源的,在分布式技术方面,Hazelcast提供了十分友好的接口供开发者选择,如Map,Queue,ExecutorService, Lock和Jcache。 Hazelcast的稳定性很高,分布式应用可以使用Hazelcast进行存储数据、同步数据、发布订阅消息等。Hazelcast是基于Java开发的,其客户端有Java, C/C++, .NET以及REST。Hazelcast同时也支持memcache协议。它很好的支持了Hibernate,可以很容易的在当今流行的数据库系统中应用。 如果你在寻找一个基于内存的、可扩展的以及对开发者友好的NoSql,那么Hazelcast是一个很不错的选择!

Hazelcast是一个高度可扩展的数据分发和集群平台。特性包括:

  • 提供java.util.{Queue, Set, List, Map}分布式实现。
  • 提供java.util.concurrency.locks.Lock分布式实现。
  • 提供java.util.concurrent.ExecutorService分布式实现。
  • 提供用于一对多关系的分布式MultiMap。
  • 提供用于发布/订阅的分布式Topic(主题)。
  • 通过JCA与J2EE容器集成和事务支持。
  • 提供用于安全集群的Socket层加密。
  • 支持同步和异步持久化。
  • 为Hibernate提供二级缓存Provider 。
  • 通过JMX监控和管理集群。
  • 支持动态HTTP Session集群。
  • 利用备份实现动态分割。
  • 支持动态故障恢复。

1.优点

a. Hazelcast开发比较简单 Hazelcast是基于Java写的,没有任何其它的依赖。它提供的API跟Java util包很像。对于开发者来说,只需要加入hazelcast.jar,然后就可以快速使用在多个JVM之间的数据共享(分布式)。 b. Hazelcast的节点之间是平等的(Peer-to-Peer) 不像其它很多的NoSql解决方案,Hazelcast的节点之间是对等的(没有主次之分)。所有的节点存储的数据都是相等的,在应用中可以很容易的增加一个Hazelcast节点。或者以客户端-服务端的形式使用。 c. Hazelcast是可扩展的 Hazelcast的扩展性非常强,可以很简单的增加或减少节点。可以自动的监听节点的增加,并以线性的方式增加存储空间和能力。节点之间的通信是以TCP的方式建立的。 d. Hazelcast效率很高。 将数据存储在内存中,所以是非常高效的,包括读操作和写操作。 e. Hazelcast是可备份的 Hazelcast的数据会在多个节点上进行备份。一旦一个节点失败了,数据将会从别的节点上进行恢复。

f. Hazelcast页面元素齐全

页面可以看到map,list等数据内容,以及一些容量的仪表图.可以看到很多有用的数据,包括每个Map的请求次数等.

2. 使用场景 分布式缓存,通常使用在数据库之前的那一层 缓存服务器 NoSql的数据存储 Spring cache 微服务的结构 储存临时数据,如web的session等 3. Hazelcast的数据拆分 Hazelcast的数据拆分叫做间隔(Partitions)。默认情况下,Hazelcast会将数据拆分成271个间隔(总数,并不是单个单点)。当传入一个key时,Hazelcast会对它进行序列化,以及进行hash的算法等算出一个数值,通过该数值它存放在相应的间隔中(271个的其中一个)。在不同的节点中存放相同数量的间隔。Hazelcast还会生成备份的间隔,同样也是存放在这些间隔中。

4.配置

hazelcast找寻配置文件的规则:

a.当一个hazelcast 节点启动的时候,它会先找寻hazelcast.config 系统属性。如果这个属性有被设置的话,那么hazelcast将会按照该属性的设置去找寻配置文件。

- Dhazelcast.config=<path to the hazelcast.xml>

b.如果找不到属性,那么hazelcast会在当前工作目录中找寻hazelcast.xml

c.如果在工作目录中找不到,会在class path寻找hazelcast.xml

d.如果还是找不到,hazelcast会加载默认的配置文件。hazlelcast.jar包中的hazelcast-default.xml

如果您想指定自己的配置文件来创建配置的话,Hazelcast提供了几种方式来供您选择,包括-filesystem,classpath,InputStream,URL等等

Config cfg = new XmlConfigBuilder(xmlFileName).build();

   Config cfg = new XmlConfigBuilder(inputStream).build();

   Config cfg = new ClasspathXmlConfig(xmlFileName);

   Config cfg = new FileSystemXmlConfig(configFilename);

   Config cfg = new UrlXmlConfig(url);

   Config cfg = new InMemoryXmlConfig(xml);

可编程配置

根据您的需求,初始化Config对象设置/修改属性,完成编程式的配置Hazelcast。

Config config =new Config();

    config.getNetworkConfig().setPort(5900 );

    config.getNetworkConfig().setPortAutoIncrement(false );

NetworkConfig network = config.getNetworkConfig();

JoinConfig join = network.getJoin();

join.getMulticastConfig().setEnabled( false );

join.getTcpIpConfig().addMember( "10.45.67.32").addMember( "10.45.67.100" ) .setRequiredMember("192.168.10.100" ).setEnabled( true );

network.getInterfaces().setEnabled( true ).addInterface("10.45.67.*" );



MapConfig mapConfig = new MapConfig();

mapConfig.setName( "testMap" );

mapConfig.setBackupCount( 2 );

mapConfig.getMaxSizeConfig().setSize( 10000 );

mapConfig.setTimeToLiveSeconds( 300 );



MapStoreConfig mapStoreConfig = new MapStoreConfig();

mapStoreConfig.setClassName("com.hazelcast.examples.DummyStore" )

    .setEnabled(true );

mapConfig.setMapStoreConfig( mapStoreConfig );



NearCacheConfig nearCacheConfig = new NearCacheConfig();

nearCacheConfig.setMaxSize( 1000 ).setMaxIdleSeconds( 120)

   .setTimeToLiveSeconds( 300 );

mapConfig.setNearCacheConfig( nearCacheConfig );



config.addMapConfig( mapConfig );

然后创建Config对象,你就可以用这个对象来创建Hazelcast实例。

1、HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance( config ); 2、创建一个名为HazelcastInstance对象,将config对象传给它。

Config config = new Config();

config.setInstanceName( "my-instance" );

Hazelcast.newHazelcastInstance( config );

用它的名字来取得一个已经存在的HazelcastInstance;

Hazelcast.getHazelcastInstanceByName("my-instance" );

用它的名字来取得所有已经存在的HazelcastInstance;

Hazelcast.getAllHazelcastInstances();

原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-09-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一英里广度一英寸深度的学习

Sqoop安装

下载页面下有两个链接,使用sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz,包含hadoop支持。不要用sqoop-1.4.7.tar....

5304
来自专栏BaronTalk

写给 Android 应用工程师的 Binder 原理剖析

这篇文章我酝酿了很久,参考了很多资料,读了很多源码,却依旧不敢下笔。生怕自己理解上还有偏差,对大家造成误解,贻笑大方。又怕自己理解不够透彻,无法用清晰直白的文字...

57710
来自专栏IT笔记

SpringBoot开发案例之奇技淫巧

程序员都有着一种天生的好奇心,这种好奇心引导着我们的编程生涯。写几行代码,装载到计算机里,让它按照你的思路工作,这是非常有趣的事情。但随着开发的东西越来越多,我...

1K10
来自专栏Spring相关

第5章—构建Spring Web应用程序—SpringMVC详解

第二步:前端控制器请求HandlerMapping查找 Handler (可以根据xml配置、注解进行查找)

1504
来自专栏玩转JavaEE

Spring Cloud中服务的发现与消费

通过前面两篇文章(使用Spring Cloud搭建服务注册中心、使用Spring Cloud搭建高可用服务注册中心)的学习,相信小伙伴们已经可以自己搭建一个单节...

3695
来自专栏Android先生

Android Binder面试详解

目前linux支持的IPC包括传统的管道、System V IPC、即消息队列/共享内存/信号量,以及socket中只有socket支持Client-Serve...

1201
来自专栏IT笔记

SpringBoot开发案例之整合日志管理

有一种力量无人能抵挡,它永不言败生来倔强。有一种理想照亮了迷茫,在那写满荣耀的地方。

4898
来自专栏编程微刊

vue踩坑-Error: listen EADDRNOTAVAIL 192.168.1.122:8081

每天上班,重启电脑,按照下面的步骤,打开vue的项目,开始编写代码,但是,今天一如往常一般操作: 1:cd /项目名称 下面就是运行项目了,cd /项目名称...

3933
来自专栏java学习

Spring学习笔记1_Spring的概述

本章目录 Spring学习笔记1_Spring的概述 1.Spring介绍 2.Spring作用 3.Spring起源 4.Spring体系结构 5.Spri...

3066
来自专栏IT 指南者专栏

SpringMVC 框架系列之组件概述与配置详解

微信公众号:compassblog 欢迎关注,互相学习,共同进步! 有任何问题,请后台留言联系! 在上一篇文章 SpringMVC 框架系列之初识与入门实例 的...

2947

扫码关注云+社区

领取腾讯云代金券