我想保留一个Long类型的List,这取决于其他实体,这个List是用用户ID设置的,很短的时间之后,我想删除那个列表,但是可能有很多条目带有这样的列表。< / p>
因此,我的第一次尝试一直在使用像这样的MultiMap类型&lt; Long,Longs列表&gt;,但遗憾的是,MultiMap尚未实施驱逐政策。下一步是尝试实现一个分布式计划任务来删除所有这些列表,为了实现这一点,我发现了一些在ExecutionService中实现它的方法。
http://docs.hazelcast.org/docs/3.4/javadoc/com/hazelcast/spi/ExecutionService.html
但我不知道要做的好方法,或者即使有可能。
最后,我尝试使用IMap实现这种行为,但是这个aproximation有一个问题,每次我想删除或添加一个新的Long id到列表,我必须从服务器获取完整列表,并确定这不是最好的方法。
答案 0 :(得分:2)
我需要一种类似于你想要的方法。这是我使用的解决方案:
为您的IMap定义一个EntryExpiredListener。这样,当您的IMap条目到期时,相关的MultiMap条目也将被删除,这意味着最终MultiMap将使用为IMap定义的相同驱逐配置,例如:
static class MyEntryExpiredListener implements EntryExpiredListener {
@Override
public void entryExpired(EntryEvent event) {
// Here you'll remove the entry with the same key in the MultiMap:
getMultiMap().remove(event.getKey());
}
}
...
MyEntryExpiredListener entryExpiredListener = new MyEntryExpiredListener();
...
HazelcastMap.addEntryListener(entryExpiredListener, false);
您还可以将MultiMap定义为Set,由配置属性(http://docs.hazelcast.org/docs/3.8.3/manual/html-single/index.html#multimap)定义:
<multimap name="MY_MULTIMAP">
<value-collection-type>SET</value-collection-type>
</multimap>
答案 1 :(得分:0)
如何将IMap和IList混合以实现目标呢?
IMap<String, String> mapping = hazelcastInstance.getMap("mappings");
String reference = mapping.get("someListIdentifier");
IList<Long> longs = hazelcastInstance.getList(reference);