我正在研究为我的hazelcast集群杀死用户活动会话。
我们有会话地图,每个会话似乎有两个条目
[SESSIONID]映射到布尔值 和[SESSIONID] :: hz :: user映射到我们的用户对象
我看到它杀死一个会话的方式我必须循环遍历地图并找到用户对象,一旦找到它就删除该条目解析密钥并查找另一个映射到布尔值的sessionId并将其杀死。
我有一种更容易的方法吗?
答案 0 :(得分:2)
在Hazelcast Mastering书中有详细描述: http://hazelcast.org/mastering-hazelcast/ 您需要注册才能阅读该书。 你可以使用谓词:
想象一下,我们有一个Hazelcast IMap,其中键是一些ID,值是Person对象,我们想要使用以下(和天真)实现检索具有给定名称的所有人:
public Set<Person> getWithNameNaive(String name){
Set<Person> result = new HashSet<Person>();
for(Person person: personMap.values()){
if(person.name.equals(name)){
result.add(person);
}
}
return result;
Hazelcast解决这个问题的方法:
public Set<Person> getWithName(String name) {
Predicate namePredicate = equal("name", name);
return (Set<Person>) personMap.values(namePredicate);
}