Hazelcast杀死用户会话

时间:2016-04-12 19:31:53

标签: java hazelcast

我正在研究为我的hazelcast集群杀死用户活动会话。

我们有会话地图,每个会话似乎有两个条目

[SESSIONID]映射到布尔值 和[SESSIONID] :: hz :: user映射到我们的用户对象

我看到它杀死一个会话的方式我必须循环遍历地图并找到用户对象,一旦找到它就删除该条目解析密钥并查找另一个映射到布尔值的sessionId并将其杀死。

我有一种更容易的方法吗?

1 个答案:

答案 0 :(得分:2)

在Hazelcast Mastering书中有详细描述: http://hazelcast.org/mastering-hazelcast/ 您需要注册才能阅读该书。 你可以使用谓词:

  1. Criteria API
  2. 分布式SQL查询
  3. RegexPredicate在地图中搜索sessionid
  4. 想象一下,我们有一个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);
    }