2016-04-12 27 views
0

Ich bin dabei, eine aktive Benutzersitzung für meinen haselnussartigen Cluster zu töten.Hazelcast tötet eine Benutzersitzung

Wir haben die Sitzung Karte und erscheint pro Sitzung zwei Einträge haben

[SESSIONID] in einen Booleschen Wert abgebildet und [SESSIONID] :: hz :: Benutzer zu unserem Benutzerobjekt zugeordnet

So wie ich es sehe, um eine Sitzung zu beenden, muss ich die Karte durchforsten und das Benutzerobjekt finden, und sobald das gefunden ist, entferne den Schlüssel und suche nach der anderen sessionId, die auf boolean gemappt ist, und kille auch diese.

Gibt es einen einfacheren Weg, den ich vermisse?

+0

Gibt es Gründe, Sie entkräften nicht nur die Session-Objekt? – noctarius

Antwort

2

Es ist gut in Hazelcast Mastering Buch beschrieben: http://hazelcast.org/mastering-hazelcast/ Sie müssen sich registrieren, um dieses Buch zu lesen. Sie können Prädikats verwenden mit:

  1. Criteria API
  2. Distributed SQL Query
  3. RegexPredicate die sessionid in der Karte suchen

Stellen Sie sich vor, dass wir eine Hazelcast IMap haben, wo der Schlüssel einige ID ist Der Wert ist ein Person-Objekt, und wir möchten alle Personen mit einem bestimmten Namen mithilfe der folgenden (und naiven) Implementierung abrufen:

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 Weg, um dieses Problem zu lösen:

public Set<Person> getWithName(String name) { 
    Predicate namePredicate = equal("name", name); 
    return (Set<Person>) personMap.values(namePredicate); 
}