Hazelcast中的ISet
是java.util.Set
的分布式和并发实现。ISet
拥有以下特性:
- 不允许重复元素。
- 不保证元素顺序。
- 不是分区数据结构。
- 扩容不能超过单节点容量限制。
- 备份数据存储在另外节点的一个分区中。
- 所有数据被拷贝到本地,本地数据遍历。
- 使用对象序列化的字节版本实现相等比较。
1. 基本操作
获取ISet
并存储数据:
HazelcastInstance instance = Hazelcast.newHazelcastInstance();
ISet<Integer> set = instance.getSet("data");
set.add(1);
set.add(2);
set.add(3);
set.add(1);
System.out.println("set size is " + set.size());
上述代码的输出为:
set size is 3
ISet
可以通过ItemListener
来监听元素的添加的和移除。
2. 配置Set
下面是ISet
的一个简单配置。
声明式配置:
<hazelcast>
...
<set name="default">
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
<max-size>10</max-size>
<item-listeners>
<item-listener>com.hazelcast.examples.ItemListener</item-listener>
</item-listeners>
<split-brain-protection-ref>splitbrainprotection-name</split-brain-protection-ref>
</set>
...
</hazelcast>
代码配置:
Config config = new Config();
CollectionConfig collectionSet = config.getSetConfig("MySet");
collectionSet.setBackupCount(1)
.setMaxSize(10)
.setSplitBrainProtectionName("splitbrainprotectionname");
ISet
支持的配置参数及意义如下:
-
statistics-enabled
: 是否开启Set统计信息,默认true。 -
backup-count
: 同步备份数。 -
async-backup-count
: 异步备份数。 -
max-size
: Set存储的最大数据量。 -
item-listeners
: 监听元素添加和移除的监听器。 -
split-brain-protection-ref
: 脑裂保护配置。
3. 脑裂保护
ISet
&TransactionalSet
支持配置在应用操作前检查集群节点最小值,以包装在网络分区发生时,操作不会在所有集群都操作成功。
下面是支持脑裂保护配置的方法:
ISet:
- WRITE, READ_WRITE:
add
addAll
clear
remove
removeAll
- READ, READ_WRITE:
contains
containsAll
isEmpty
iterator
size
toArray
TransactionalSet:
- WRITE, READ_WRITE:
add
remove
- READ, READ_WRITE:
size
脑裂保护配置
下面是一个简单的配置:
<hazelcast>
...
<set name="default">
<split-brain-protection-ref>splitbrainprotection-name</split-brain-protection-ref>
</set>
...
</hazelcast>