ScopedCacheManager : Bereichsbezogen
Die ScopedCacheManager -API bietet Methoden zum Abrufen, Festlegen und Leeren von Cache-Daten für bereichsbezogene Anwendungen.
Diese API erfordert das Plugin „Scoped Cache“ (com.glide.scopedcache) und wird im Namespace sn_scoped_cache ausgeführt. Das Plugin wird standardmäßig installiert und aktiviert.
Für diese Methoden müssen ein oder mehrere bereichsbezogene Caches und bereichsbezogene Cache-Paare definiert werden. Weitere Informationen zum Erstellen von bereichsbezogenen Caches finden Sie im Entwicklerhandbuch für die ScopedCacheManager-API.
- Zeichenfolgen in bereichsbezogenen Anwendungen, die sich im Speicher über Transaktionen hinweg befinden, werden zwischengespeichert.
- Bereichsbezogene Anwendungsdaten werden im Arbeitsspeicher zwischengespeichert und basierend auf Änderungen in der zugrunde liegenden Tabelle geleert.
- Cachedaten außerhalb des Transaktionslebenszyklus definieren und verwenden
- Zwischenspeicherung der Ausgabe von kostspieligen Vorgängen oder Berechnungen für einen schnellen Zugriff in der Zukunft.
ScopedCacheManager – cleanScopedCache(Zeichenfolgenkatalog, Zeichenfolgenschlüssel)
Leert einen gesamten Cache oder einen einzelnen Eintrag aus einem Cache.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Caches, der in der Tabelle „Bereichsbezogene Caches“ [sys_scoped_cache] definiert ist. |
| key | Zeichenfolge | Optional. Cache-Schlüssel. Legen Sie diesen Parameter fest, um einen einzelnen Eintrag aus einem Cache zu leeren. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Beispiel zeigt, wie der Schlüssel „abc“ aus einem Cache namens myCache geleert wird. Um den gesamten Cache zu leeren, lassen Sie den Schlüsselparameter weg.
sn_scoped_cache.ScopedCacheManager.flushScopedCache("myCache", "abc");
ScopedCacheManager – get(Zeichenfolgenkatalog, Zeichenfolgenschlüssel)
Ruft einen Wert aus einem Cache ab.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Caches, der in der Tabelle „Bereichsbezogene Caches“ [sys_scoped_cache] definiert ist. |
| key | Zeichenfolge | Cache-Schlüssel. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Cache-Eintrag. |
Das folgende Beispiel zeigt, wie die Anzahl der Incident-Datensätze gezählt wird, die Kurzbeschreibungen mit einer größeren Anzahl von Zeichen als der Schlüssel (50) enthalten. In diesem Fall gibt es 6 Incident-Datensätze mit Kurzbeschreibungen, die länger als 50 Zeichen sind. Dieser Wert wird als wiederverwendbare Zeichenfolge im Cache gespeichert, sodass Sie nicht jedes Mal, wenn Sie den Wert abrufen möchten, eine Berechnung durchführen müssen.
var cache2 = "Cache 2"; // column pair type
// Re-populate the column cache
for (var i = 0; i < 100; i+=10) {
var inc = new GlideRecord('incident');
inc.query();
var counter = 0;
while (inc.next()) {
if (inc.getValue('short_description').length > i)
counter++;
}
sn_scoped_cache.ScopedCacheManager.put(cache2, i.toString(), counter.toString());
}
// script to get values from column cache
gs.info(sn_scoped_cache.ScopedCacheManager.get(cache2, "50"));
Ausgabe:
scoped_app: 6
ScopedCacheManager – getCacheEntryDetails(Zeichenfolgenkatalog, Zeichenfolgenschlüssel)
Ruft Cache-Eintragsdetails ab, einschließlich Bytegröße, Objekttyp und Eingabewert.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Caches, der in der Tabelle „Bereichsbezogene Caches“ [sys_scoped_cache] definiert ist.
Dem Katalognamen müssen der Bereichsname und ein Caret-Zeichen vorangestellt werden. Beispielsweise wird „test_cache“ im globalen Bereich als |
| key | Zeichenfolge | Cache-Schlüssel. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Zeichenfolge im Format<ObjectType> (<EntrySize> ):<Value.toString()> . |
Das folgende Beispiel zeigt, wie Cache-Eintragsdetails für einen bereichsbezogenen Cache namens test_cacheangezeigt werden.
sn_scoped_cache.ScopedCacheManager.put("test_cache", "key1", "val1");
gs.info(sn_scoped_cache.ScopedCacheManager.getCacheEntryDetails("global^test_cache", "key1"));
Ausgabe:
java.lang.String (48):
val1
ScopedCacheManager – prefixFlush(Zeichenfolgenkatalog, Zeichenfolgenpräfix)
Leert alle Cache-Einträge, deren Schlüssel mit einem angegebenen Präfix beginnen.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Caches, der in der Tabelle „Bereichsbezogene Caches“ [sys_scoped_cache] definiert ist. |
| Präfix | Zeichenfolge | Präfix für die Suche nach Schlüsseln beim Leeren des Cache. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Beispiel zeigt, wie Cache-Werte für Schlüssel mit dem Präfix ageleert werden.
sn_scoped_cache.ScopedCacheManager.put("test_cache", "aKey1", "val1");
sn_scoped_cache.ScopedCacheManager.put("test_cache", "aKey2", "val2");
sn_scoped_cache.ScopedCacheManager.put("test_cache", "bKey1", "val3");
sn_scoped_cache.ScopedCacheManager.prefixFlush("test_cache", "a");
gs.info(sn_scoped_cache.ScopedCacheManager.get("test_cache", "aKey1"));
gs.info(sn_scoped_cache.ScopedCacheManager.get("test_cache", "aKey2"));
gs.info(sn_scoped_cache.ScopedCacheManager.get("test_cache", "bKey1"));
Ausgabe:
*** Script: null
*** Script: null
*** Script: val3
ScopedCacheManager –put(Zeichenfolgenkatalog, Zeichenfolgenschlüssel, Zeichenfolgenwert)
Platziert einen Wert in einem bereichsbezogenen Cache für Caches vom Typ „Tabellenpaar “ oder „Tabellenspaltenpaar “.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Caches, der in der Tabelle „Bereichsbezogene Caches“ [sys_scoped_cache] definiert ist. |
| key | Zeichenfolge | Cache-Schlüssel. |
| Wert | Zeichenfolge | Cache-Eintrag. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Beispiel zeigt, wie ein Schlüssel namens „abc“ für einen Cache namens myCache definiert und abgerufen wird. Der Cache ist mit der Incident-Tabelle [incident] tabellengekoppelt. Das Beispiel zeigt auch, wie der Cache geleert wird, nachdem das Beschreibungsfeld eines Incident-Datensatzes aktualisiert wurde.
//put value in cache for key "abc"
gs.info("put key 'abc' into cache with value 'value1'");
sn_scoped_cache.ScopedCacheManager.put("myCache", "abc", "value1");
// retrieve value from cache for key "abc"
gs.info("value of 'abc' in cache: ");
gs.info(sn_scoped_cache.ScopedCacheManager.get("myCache", "abc")+"\n");
//update an incident record (add string to the description field)
gs.info("Updating incident record.");
var gr = new GlideRecord("incident");
gr.get("<incident_sys_id>");
gr.description= "test12345";
if (gr.update()) {
gs.info("Record updated successfully.\n");
};
//retrieve the value from cache for key "abc"
gs.info("Retrieving 'abc' from cache. Value should be null because a table pair was updated.");
gs.info(sn_scoped_cache.ScopedCacheManager.get("myCache", "abc"));
Ausgabe:
scoped_app: put key 'abc' into cache with value 'value1'
scoped_app: value of 'abc' in cache:
scoped_app: value1
scoped_app: Updating incident record.
scoped_app: Record updated successfully.
scoped_app: Retrieving 'abc' from cache. Value should be null because a table pair was updated.
scoped_app: null
ScopedCacheManager –putMultiRow(Zeichenfolgenkatalog, Zeichenfolgenschlüssel, Zeichenfolgenwert, Array-IDs)
Fügt einen Eintrag in den Cache ein und legt alle Datensätze mit den angegebenen sys_ids als Leerungsquelle für diesen Eintrag fest. Diese Methode ist für Caches vorgesehen, die vom Typ „Tabellenpaar“ oder „Tabellenspaltenpaar “ sind.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Der zu leerende Katalog. Name des Caches, der in der Tabelle „Bereichsbezogene Caches“ [sys_scoped_cache] definiert ist. |
| key | Zeichenfolge | Cache-Schlüssel für den neuen Eintrag. |
| Wert | Zeichenfolge | Wert für neuen Eintrag. |
| ids | Array | Liste der sys_ids der Datensätze, die als Leerungsquellen für den Eintrag verwendet werden sollen. Diese Datensätze können aus verschiedenen Tabellen stammen. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Beispiel zeigt, wie ein Incident und ein Benutzerdatensatz als Leerungspunkte verwendet werden. Der test_cache-Schlüssel INC0000060 wird geleert, wenn einer der angegebenen Datensätze aktualisiert wird.
// This example requires a table-row pair for the "incident" and "sys_user" tables assigned to a cache named test_cache
var inc1ID = "1c741bd70b2322007518478d83673af3";
var userID = "681ccaf9c0a8016400b98a06818d57c7";
// update to email should invalidate the entry
gs.info("initial put");
putCacheEntry();
gs.info("cache value for INC0060: " + sn_scoped_cache.ScopedCacheManager.get("test_cache", "INC0000060"));
var gr = new GlideRecord("sys_user");
gr.get(userID);
gr.setValue("email", "a" + gr.getValue("email"));
gr.update();
gs.info("updated user email");
gs.info("cache value: " + sn_scoped_cache.ScopedCacheManager.get("test_cache", "INC0000060"));
// update to incident number should invalidate the entry.
gs.info("second put");
putCacheEntry();
gs.info("cache value: " + sn_scoped_cache.ScopedCacheManager.get("test_cache", "INC0000060"));
var gr = new GlideRecord("incident");
gr.get(inc1ID);
gr.setValue("number", gr.getValue("number") + "1");
gr.update();
gs.info("updated incident number");
gs.info("cache value: " + sn_scoped_cache.ScopedCacheManager.get("test_cache", "INC0000060"));
function putCacheEntry() {
var incGr = new GlideRecord("incident");
incGr.get(inc1ID);
var userGr = new GlideRecord("sys_user");
userGr.get(userID);
// the cache stores that the incident is assigned to a specific user. So if the incident or user record changes, we should flush.
sn_scoped_cache.ScopedCacheManager.putMultiRow("test_cache",incGr.getValue("number"), userGr.getValue("email"), [inc1ID, userID]);
}
Ausgabe:
*** Script: initial put
*** Script: cache value for INC0060: employee@example.com
*** Script: Updating Joe Employee's primary email device based on change to user record email address
*** Script: updated user email
*** Script: cache value: null
*** Script: second put
*** Script: cache value: aemployee@example.com
*** Script: updated incident number
*** Script: cache value: null
ScopedCacheManager –putRow(Zeichenfolgenkatalog, Zeichenfolgenschlüssel, Zeichenfolgenwert, Zeichenfolgen-sysId)
Fügt einen Wert in eine einzelne Zeile (Tabelle) eines Cache ein. Verwenden Sie diese Methode für Caches vom Typ „Tabellenzeile“ oder „Tabellenzeile und Spalte “.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Caches, der in der Tabelle „Bereichsbezogene Caches“ [sys_scoped_cache] definiert ist. |
| key | Zeichenfolge | Cache-Schlüssel. |
| Wert | Zeichenfolge | Cache-Eintrag. |
| sysId | Zeichenfolge | Optional. Sys_id einer Zeile in einer Tabelle, also des nachverfolgten Datensatzes. |
| Typ | Beschreibung |
|---|---|
| Keine |
Im folgenden Beispiel wird ein Tabellenzeilenpaar-Cache-Typ mit der Bezeichnung incident_cache verwendet. Der Cache fügt die Incident-Anrufer-ID hinzu, und die Cache-Einträge, die der sys_id des geänderten Datensatzes zugeordnet sind, werden gelöscht.
// build the cache:
var number = 'INC0009009';
var inc = new GlideRecord('incident');
inc.addQuery('number', number);
inc.query();
inc.next();
var entry = inc.caller_id.getDisplayValue();
sn_scoped_cache.ScopedCacheManager.putRow("incident_cache", inc.getValue('number'), entry, inc.getValue('sys_id'));
gs.info(sn_scoped_cache.ScopedCacheManager.get("incident_cache", number));
// when the incident is altered, the cache entry will be flushed.
inc = new GlideRecord('incident');
inc.addQuery('number', number);
inc.query();
inc.next();
inc.setValue('short_description', inc.getValue('short_description') + "a");
inc.update();
gs.info(sn_scoped_cache.ScopedCacheManager.get("incident_cache", number));
Ausgabe:
scoped_app: John Jones
scoped_app: null