Mit dem JavaCompute -Knoten angeben, wie lange Daten im globalen Cache verbleiben
Geben Sie an, wann Daten automatisch aus dem globalen Cache entfernt werden sollen.
Vorbereitungen
Erstellen Sie einen Nachrichtenfluss mit einem Mapping -Knoten oder einem JavaCompute -Knoten, der für den Zugriff auf den globalen Cache konfiguriert ist. Weitere Informationen finden Sie unter Über einen Zuordnungsknoten auf den globalen Cache zugreifen oder Über einen JavaCompute -Knoten auf den globalen Cache zugreifen.
Informationen zu dieser Task
Beim Abruf eines MbGlobalMap-Objekts können Sie angeben, wie lange die Daten im globalen Cache verbleiben, bis sie automatisch entfernt werden. Diese Zeit wird als Time To Live (TTL) bezeichnet und wird ab der letzten Aktualisierung des Karteneintrags gezählt. Der Wert gilt für alle Cacheeinträge, die unter Verwendung dieses MbGlobalMap-Objekts in dieser Instanz des Nachrichtenflusses erstellt werden. Daten, die sich bereits in der von Ihnen angegebenen Map befinden oder die von einem anderen MbGlobalMap -Objekt erstellt wurden, sind vom TTL-Wert nicht betroffen.
Standardmäßig ist die TTL auf Null gesetzt, so dass die Daten nie gelöscht werden. Um eine bestimmte TTL festzulegen, erstellen Sie eine Sitzungsrichtlinie, auf die Sie über das Objekt MbGlobalMap verweisen können.
- Für eingebettete und externe WebSphere® eXtreme Scale (WXS)-Gitter
Sie können mehrere MbGlobalMap Objekte in verschiedenen Abläufen, Integrationsservern oder Integrationsknoten erstellen, die alle auf dieselbe Map im globalen Cache verweisen, jedoch mit unterschiedlichen TTL-Werten. Sie müssen den Code jedoch auf eine bestimmte Weise strukturieren, wenn Sie mehrere Cache-Einträge mit unterschiedlichen TTL-Werten in dieselbe Map im selben Nachrichtenfluss einfügen wollen.
Im folgenden Beispiel werden alle MbGlobalMap-Objekte vor den Put-Anweisungen erstellt. Alle drei MbGlobalMap-Objekte werden in dieselbe zugrunde liegend e Zuordnung aufgelöst. Der TTL-Wert jedes nachfolgenden MbGlobalMap Objekts ersetzt den Wert, der für das vorherige Objekt festgelegt wurde. Daher werden die Daten bei jeder Put-Anweisung nach 20 Sekunden entfernt.MbGlobalMap m1 = MbGlobalMap.getGlobalMap("myMap", new MbGlobalMapSessionPolicy(60)); MbGlobalMap m2 = MbGlobalMap.getGlobalMap("myMap", new MbGlobalMapSessionPolicy(40)); MbGlobalMap m3 = MbGlobalMap.getGlobalMap("myMap", new MbGlobalMapSessionPolicy(20)); m1.put("k1","v1"); m2.put("k2","v2"); m3.put("k3","v3");Im folgenden Beispiel wird jede Put-Anweisung direkt nach der Erstellung des zugeordneten MbGlobalMap-Objekts ausgegeben. Daher nimmt der Cache-Eintrag, der durch jede Put-Anweisung erstellt wird, einen anderen TTL-Wert an.MbGlobalMap m1 = MbGlobalMap.getGlobalMap("myMap", new MbGlobalMapSessionPolicy(60)); m1.put("k1","v1"); m1 = MbGlobalMap.getGlobalMap("myMap", new MbGlobalMapSessionPolicy(40)); m1.put("k2","v2"); m1 = MbGlobalMap.getGlobalMap("myMap", new MbGlobalMapSessionPolicy(20)); m1.put("k3","v3");
- Für den lokalen Cache
Die TTL einer lokalen Karte ist an die Karte selbst gebunden und wird bei der Erstellung dieser Karte festgelegt. Alle Datenströme innerhalb dieses Integrationsservers erhalten dieselbe TTL, unabhängig von der Sitzungsrichtlinie, die für den Zugriff auf diese Zuordnung verwendet wird.
Im folgenden Beispiel ändert sich die TTL einer einzelnen Karte nicht, selbst wenn neue Handles mit neuen Sitzungsrichtlinien auf diese Karte zugreifen.MbGlobalMap m1 = MbGlobalMap.getGlobalMap("myMapWith10TTL", new MbGlobalMapSessionPolicy(10)); m1.put("k1", "v1"); // TTL = 10 seconds MbGlobalMap m2 = MbGlobalMap.getGlobalMap("myMapWith10TTL", new MbGlobalMapSessionPolicy(20)); // As myMapWith10TTL already exists, the original Map is returned, with a TTL of 10 m1.put("k2", "v2"); // TTL = 10 seconds m2.put("k2", "v2"); // TTL = 10 seconds (!) MbGlobalMap m3 = MbGlobalMap.getGlobalMap("myMapWith10TTL"); m3.put("k3", "v3"); // TTL = 10 seconds (!)
- Für eingebetteten globalen Cache und externen Redis globalen Cache
Das Verhalten von
MbGlobalMapSessionPolicy, das die TTL für Einträge in einer globalen Cache-Map definiert, hat sich geändert. Bei dem eingebetteten globalen Cache und dem externen Redis globalen Cache ist die TTL spezifisch für das Map-Handle. Jede Instanz vonMbGlobalMapbehält den zum Zeitpunkt ihrer Erstellung festgelegten TTL-Wert. Die TTL wird nicht mehr zwischen Karten-Handles auf demselben Thread geteilt.Im folgenden Beispiel behält jedes Map-Handle seine eigene TTL.MbGlobalMap m1 = MbGlobalMap.getGlobalMap("myMap", new MbGlobalMapSessionPolicy(10)); m1.put("k1", "v1"); // TTL = 10 seconds MbGlobalMap m2 = MbGlobalMap.getGlobalMap("myMap", new MbGlobalMapSessionPolicy(20)); // TTL on m2 is 20 seconds, but does not affect m1 m1.put("k2", "v2"); // TTL = 10 seconds MbGlobalMap m3 = MbGlobalMap.getGlobalMap("myMap"); m3.put("k3", "v3"); // No TTL applied