ScopedCacheManager – Umfang

  • Freigeben Version: Zurich
  • Aktualisiert 31. Juli 2025
  • 6 Minuten Lesedauer
  • 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 .

    Die Verwendung dieser API mit bereichsbezogenen Caches bietet mehrere Vorteile, einschließlich:
    • 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.

    Tabelle : 1. Parameter
    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.
    Tabelle : 2. Rückgaben
    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.

    Tabelle : 3. Parameter
    Name Typ Beschreibung
    Katalog Zeichenfolge Name des Cache, der in der Tabelle „bereichsbezogene Caches“ [sys_scoped_Cache] definiert ist.
    key Zeichenfolge Cache-Schlüssel.
    Tabelle : 4. Ergebnisse
    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.

    Tabelle : 5. Parameter
    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 „Global^Test_Cache“ .

    key Zeichenfolge Cache-Schlüssel.
    Tabelle : 6. Ergebnisse
    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.

    Tabelle : 7. Parameter
    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.
    Tabelle : 8. Rückgaben
    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.

    Tabelle : 9. Parameter
    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.
    Tabelle : 10. Ergebnisse
    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.

    Tabelle : 11. Parameter
    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.
    Tabelle : 12. Rückgaben
    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.

    Tabelle : 13. Parameter
    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.
    Tabelle : 14. Rückgaben
    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