ScopedCacheManager – Umfang
Die ScopedCacheManager Die 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 in ausgeführt sn_scope_Cache Namespace. Das Plugin ist standardmäßig installiert und aktiviert.
Diese Methoden erfordern die Definition eines oder mehrerer bereichsbezogener Caches und bereichsbezogener Cache-Paare. Weitere Informationen zum Erstellen von bereichsbezogenen Caches finden Sie unter ScopedCacheManager API-Entwicklerleitfaden .
- Zwischenspeichern von Zeichenfolgen in bereichsbezogenen Anwendungen, die im Arbeitsspeicher über Transaktionen hinweg gespeichert sind.
- Bereichsbezogene Anwendungsdaten werden im Arbeitsspeicher zwischengespeichert und basierend auf Änderungen in der zugrunde liegenden Tabelle geleert.
- Definition und Verwendung von Cache-Daten außerhalb des Transaktionslebenszyklus.
- Zwischenspeicherung der Ausgabe teurer Vorgänge oder Berechnungen für schnellen Zugriff in der Zukunft.
ScopedCacheManager – flushScopedCache(Zeichenfolgenkatalog, Zeichenfolgenschlüssel)
Leert einen gesamten Cache oder einen einzelnen Eintrag aus einem Cache.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Cache, 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 Cache, 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 mit Kurzbeschreibungen mit einer Anzahl von Zeichen größer als der Schlüssel (50) gezählt wird. In diesem Fall gibt es 6 Incident-Datensätze mit Kurzbeschreibungen, die länger als 50 Zeichen sind. Dieser Wert wird im Cache als wiederverwendbare Zeichenfolge gespeichert, sodass Sie nicht jedes Mal eine Berechnung vornehmen müssen, wenn Sie den Wert abrufen möchten.
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 Cacheeintragsdetails ab, einschließlich Bytegröße, Objekttyp und Eintragswert.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Cache, der in der Tabelle „bereichsbezogene Caches“ [sys_scoped_Cache] definiert ist.
Dem Katalognamen müssen der Bereichsname und ein Caret-Zeichen vorangestellt sein. Beispiel: „Test_Cache“ im globalen Bereich hat das Präfix |
| key | Zeichenfolge | Cache-Schlüssel. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Zeichenfolge im Format <ObjectType> (<EntrySize>): <Value.toString()> . |
Das folgende Beispiel zeigt, wie Cacheeintragsdetails für einen bereichsbezogenen Cache mit dem Namen angezeigt werden Test_Cache .
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, die Schlüssel haben, die mit einem angegebenen Präfix beginnen.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Cache, der in der Tabelle „bereichsbezogene Caches“ [sys_scoped_Cache] definiert ist. |
| Präfix | Zeichenfolge | Präfix, mit dem beim Leeren des Cache nach Schlüsseln gesucht werden soll. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Beispiel zeigt, wie Cache-Werte für Schlüssel mit dem Präfix geleert werden A .
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)
Gibt einen Wert in einen bereichsbezogenen Cache für Caches ein, die sind Tabelle Oder Tabellenspalte Paartypen.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Cache, 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 Sie einen Schlüssel namens „abc“ definieren und in einen Cache namens „myCache“ abrufen. Der Cache ist mit der Tabelle „Incident“ [Incident] gekoppelt. Das Beispiel zeigt auch, wie der Cache nach dem Aktualisieren des Beschreibungsfelds eines Incident-Datensatzes geleert wird.
//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 Entleerungsquelle für diesen Eintrag fest. Diese Methode ist für Caches vorgesehen, die sind Tabelle Oder Tabellenspalte Paartypen.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Der Katalog, der geleert werden soll. Name des Cache, 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 Entleerungsquellen 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 Anwenderdatensatz als Flusspunkte verwendet werden. Der Schlüssel „Test_Cache“ 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, SYS-ID der Zeichenfolge)
Gibt einen Wert in einer einzelnen Zeile (Tabelle) eines Cache ein. Verwenden Sie diese Methode für Caches, die sind Tabellenzeile Oder Tabellenzeile und -Spalte Paartypen.
| Name | Typ | Beschreibung |
|---|---|---|
| Katalog | Zeichenfolge | Name des Cache, 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, d. h. des nachverfolgten Datensatzes. |
| Typ | Beschreibung |
|---|---|
| Keine |
Im folgenden Beispiel wird ein Cache-Typ für Tabellenzeilenpaare mit dem Namen Incident_Cache verwendet. Der Cache fügt die ID des Incident-Anrufers 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