ScopedCacheManager – Scoped

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 6 Minuten Lesedauer
  • 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 ist 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 ScopedCacheManager API-Entwicklerleitfaden.

    Die Verwendung dieser API mit bereichsbezogenen Caches bietet mehrere Vorteile, darunter:
    • Zwischenspeichern von Zeichenfolgen in bereichsbezogenen Anwendungen, die sich transaktionsübergreifend im Speicher befinden.
    • Zwischenspeichern von bereichsbezogenen Anwendungsdaten im Speicher und Leeren dieser Daten basierend auf Änderungen in der zugrunde liegenden Tabelle.
    • Definieren und Verwenden von Cache-Daten außerhalb des Transaktionslebenszyklus.
    • Zwischenspeicherung der Ausgabe von kostspieligen Vorgängen oder Berechnungen für einen schnellen Zugriff in der Zukunft.

    ScopedCacheManager – FlushScopedCache(String catalog, String key)

    Leert einen gesamten Cache oder einen einzelnen Eintrag aus einem Cache.

    Tabelle : 1. Parameter
    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.
    Tabelle : 2. Ergebnisse
    Typ Beschreibung
    Keine

    Das folgende Beispiel zeigt, wie der Schlüssel „abc“ aus einem Cache mit dem Namen myCache geleert wird. Um den gesamten Cache zu leeren, lassen Sie den Schlüsselparameter weg.

    sn_scoped_cache.ScopedCacheManager.flushScopedCache("myCache", "abc");

    ScopedCacheManager – get(String catalog, String key)

    Ruft einen Wert aus einem Cache ab.

    Tabelle : 3. Parameter
    Name Typ Beschreibung
    Katalog Zeichenfolge Name des Caches, 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 gezählt wird, deren Anzahl Zeichen den Schlüssel (50) überschreitet. 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 durchführen 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(String catalog, String key)

    Ruft Cache-Eintragsdetails ab, einschließlich Byte-Größe, Objekttyp und Eintragswert.

    Tabelle : 5. Parameter
    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 Einfügezeichen vorangestellt werden. Zum Beispiel wird „test_cache“ im globalen Bereich als „global^test_cache“vorangestellt.

    key Zeichenfolge Cache-Schlüssel
    Tabelle : 6. Ergebnisse
    Typ Beschreibung
    Zeichenfolge Zeichenfolge im Format<ObjectType> (<EntrySize> ):<Value.toString()> .

    Das folgende Beispiel zeigt, wie Cache-Eintragsdetails für einen bereichsbezogenen Cache mit dem Namen test_cache angezeigt 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(String catalog, String prefix)

    Leert alle Cache-Einträge, deren Schlüssel mit einem angegebenen Präfix beginnen.

    Tabelle : 7. Parameter
    Name Typ Beschreibung
    Katalog Zeichenfolge Name des Caches, der in der Tabelle „Bereichsbezogene Caches“ [sys_scoped_cache] definiert ist.
    Präfix Zeichenfolge Präfix, nach dem beim Leeren des Caches nach Schlüsseln gesucht werden soll.
    Tabelle : 8. Ergebnisse
    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(String catalog, String key, String value)

    Fügt einen Wert in einen bereichsbezogenen Cache für Caches ein, die vom Typ „ Tabelle “ oder „ Tabellenspaltenpaar “ sind.

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

    Das folgende Beispiel zeigt, wie ein Schlüssel mit dem Namen „abc“ definiert und für einen Cache mit dem Namen myCache abgerufen wird. Der Cache ist mit der Incident-Tabelle [incident] tabellengepaart. 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(String catalog, String key, String value, Array ids)

    Fügt einen Eintrag in den Cache ein und legt alle Datensätze mit den angegebenen sys_ids als leere Quelle für diesen Eintrag fest. Diese Methode ist für Caches vorgesehen, die vom Typ Tabelle oder Tabellenspaltenpaar sind.

    Tabelle : 11. Parameter
    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 Flush-Quellen für den Eintrag verwendet werden sollen. Diese Datensätze können aus verschiedenen Tabellen stammen.
    Tabelle : 12. Ergebnisse
    Typ Beschreibung
    Keine

    Das folgende Beispiel zeigt, wie ein Incident und ein Benutzerdatensatz als Löschpunkte 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(String catalog, String key, String value, String 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.

    Tabelle : 13. Parameter
    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.
    Tabelle : 14. Ergebnisse
    Typ Beschreibung
    Keine

    Im folgenden Beispiel wird ein Tabellenzeilenpaar-Cache-Typ mit dem Namen 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