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