IList
和ISet
类似,但是IList
支持存储重复元素。
- 除了支持存储重复元素,List还能保证元素的顺序。
- List也是非分区数据结构。
- List容量扩展不能超过单节点容量限制。
- 数据被拷贝到本地,本地遍历。
1. 基本操作
获取一个IList
并添加数据,同时使用ItemListener
监听数据的添加和移除:
HazelcastInstance instance = Hazelcast.newHazelcastInstance();
IList<Integer> list = instance.getList("data");
list.addItemListener(new ItemListener<Integer>() {
@Override
public void itemAdded(ItemEvent<Integer> itemEvent) {
System.out.println(itemEvent.getItem() + " added");
}
@Override
public void itemRemoved(ItemEvent<Integer> itemEvent) {
System.out.println("removed");
}
},true);
list.add(1);
list.add(2);
list.add(1);
list.remove(2);
代码输出如下:
1 added
2 added
1 added
removed
2. List配置
下面是List的一个简单配置。
声明式配置:
<hazelcast>
...
<list 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>
</list>
...
</hazelcast>
代码配置:
Config config = new Config();
CollectionConfig collectionList = config.getListConfig("MyList");
collectionList.setBackupCount(1)
.setMaxSize(10)
.setSplitBrainProtectionName("splitbrainprotectionname");
IList
支持的配置参数及意义如下:
-
statistics-enabled
: 是否开启List统计信息,默认为true。 -
backup-count
: 同步备份数。 -
async-backup-count
: 异步备份数。 -
max-size
: List存储的最大数据量。 -
item-listeners
: 元素添加和移除监听器。 -
split-brain-protection-ref
: 脑裂保护配置。
3. 脑裂保护
IList
&TransactionalList
支持配置在应用操作前检查集群节点最小值,以包装在网络分区发生时,操作不会在所有集群都操作成功。
下面是支持脑裂保护的方法:
IList:
- WRITE, READ_WRITE:
add
addAll
clear
remove
removeAll
set
- READ, READ_WRITE:
add
contains
containsAll
get
indexOf
isEmpty
iterator
lastIndexOf
listIterator
size
subList
toArray
TransactionalList:
- WRITE, READ_WRITE:
add
remove
- READ, READ_WRITE:
size
脑裂保护配置
下面是一个简单的配置:
<hazelcast>
...
<list name="default">
<split-brain-protection-ref>splitbrainprotection-name</split-brain-protection-ref>
</list>
...
</hazelcast>
网友评论