ScopedCacheManager: Bereichsbezogen

  • Freigeben Version: Xanadu
  • Aktualisiert 1. August 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 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.

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

    Tabelle : 1. Parameter
    Name Typ Beschreibung
    catalog 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 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
    catalog 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 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.

    Tabelle : 5. Parameter
    Name Typ Beschreibung
    catalog 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 „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 namens 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(Zeichenfolgenkatalog, Zeichenfolgenpräfix)

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

    Tabelle : 7. Parameter
    Name Typ Beschreibung
    catalog 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.
    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(Zeichenfolgenkatalog, Zeichenfolgenschlüssel, Zeichenfolgenwert)

    Platziert einen Wert in einem bereichsbezogenen Cache für Caches vom Typ „ Tabellenpaar “ oder „ Tabellenspaltenpaar “.

    Tabelle : 9. Parameter
    Name Typ Beschreibung
    catalog 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 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.

    Tabelle : 11. Parameter
    Name Typ Beschreibung
    catalog 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.
    Tabelle : 12. Ergebnisse
    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 “.

    Tabelle : 13. Parameter
    Name Typ Beschreibung
    catalog 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 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