ScopedCacheManager : inclus dans le champ d’application

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 7 minutes de lecture
  • L’API ScopedCacheManager fournit des méthodes de récupération, de définition et de vidage des données de cache pour les applications incluses dans le périmètre.

    Cette API nécessite le module d’extension Scoped Cache (com.glide.scopedcache) et s’exécute dans l’espace de noms sn_scoped_cache . Le module d’extension est installé et activé par défaut.

    Ces méthodes nécessitent la définition d’un ou de plusieurs caches inclus dans le champ d’application et de plusieurs paires de caches inclus dans le champ d’application. Pour plus d’informations sur la création de caches inclus dans le champ d’application, consultez le Guide du développeur de l’API ScopedCacheManager.

    L’utilisation de cette API avec des caches inclus dans le champ d’application offre plusieurs avantages, notamment :
    • Chaînes de mise en cache dans les applications incluses dans le périmètre qui vivent en mémoire entre les transactions.
    • Mise en cache des données d’application incluses dans le périmètre en mémoire et vidage de ces données en fonction des changements apportés à la table sous-jacente.
    • Définition et utilisation des données de cache en dehors du cycle de vie de la transaction
    • Mise en cache de la sortie d’opérations ou de calculs coûteux pour un accès rapide à l’avenir.

    ScopedCacheManager – flushScopedCache(Catalogue de chaînes, clé de chaîne)

    Vide tout un cache ou une seule entrée d’un cache.

    Tableau 1. Paramètres
    Nom Type Description
    catalogue Chaîne Nom du cache défini dans la table Caches inclus dans le champ d’application [sys_scoped_cache].
    key Chaîne Facultatif. Clé de cache. Définissez ce paramètre pour vider une seule entrée d’un cache.
    Tableau 2. Renvoie
    Type Description
    Aucun

    L’exemple suivant montre comment vider la clé « abc » d’un cache nommé myCache. Pour vider l’intégralité du cache, omettez le paramètre key.

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

    ScopedCacheManager – obtenir (catalogue de chaînes, clé de chaîne)

    Obtient une valeur à partir d’un cache.

    Tableau 3. Paramètres
    Nom Type Description
    catalogue Chaîne Nom du cache défini dans la table Caches inclus dans le champ d’application [sys_scoped_cache].
    key Chaîne Clé de cache.
    Tableau 4. Renvoie
    Type Description
    Chaîne Entrée de cache.

    L’exemple suivant montre comment compter le nombre d’enregistrements d’incidents ayant des descriptions brèves avec un nombre de caractères supérieur à la clé (50). Dans ce cas, il existe 6 enregistrements d’incidents avec des descriptions brèves de plus de 50 caractères. Cette valeur est stockée dans le cache sous la forme d’une chaîne réutilisable, de sorte que vous n’avez pas besoin d’effectuer un calcul à chaque fois que vous souhaitez récupérer la valeur.

    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"));

    Sortie :

    scoped_app: 6

    ScopedCacheManager – getCacheEntryDetails(catalogue de chaînes, clé de chaîne)

    Obtient les détails d’entrée du cache, y compris la taille en octets, le type d’objet et la valeur d’entrée.

    Tableau 5. Paramètres
    Nom Type Description
    catalogue Chaîne Nom du cache défini dans la table Caches inclus dans le champ d’application [sys_scoped_cache].

    Le nom du catalogue doit être précédé du nom du champ d’application et d’un caractère de caret. Par exemple, « test_cache » dans le périmètre global est précédé d’un préfixe « global^test_cache ».

    key Chaîne Clé de cache.
    Tableau 6. Renvoie
    Type Description
    Chaîne Chaîne au format <ObjectType> (<EntrySize>) : <Value.toString()>.

    L’exemple suivant montre comment afficher les détails d’entrée de cache pour un cache inclus dans le champ d’application nommé test_cache.

    sn_scoped_cache.ScopedCacheManager.put("test_cache", "key1", "val1");
    gs.info(sn_scoped_cache.ScopedCacheManager.getCacheEntryDetails("global^test_cache", "key1"));

    Sortie :

    java.lang.String (48):
    val1

    ScopedCacheManager – prefixFlush(catalogue de chaînes, préfixe de chaîne)

    Vide toutes les entrées de cache dont les clés commencent par un préfixe spécifié.

    Tableau 7. Paramètres
    Nom Type Description
    catalogue Chaîne Nom du cache défini dans la table Caches inclus dans le champ d’application [sys_scoped_cache].
    préfixe Chaîne Préfixe par lequel rechercher des clés lors de la purge du cache.
    Tableau 8. Renvoie
    Type Description
    Aucun

    L’exemple suivant montre comment vider les valeurs de cache pour les clés avec le préfixe 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"));

    Sortie :

    *** Script: null
    *** Script: null
    *** Script: val3

    ScopedCacheManager – put (catalogue de chaînes, clé de chaîne, valeur de chaîne)

    Met une valeur dans un cache inclus dans le champ d’application pour les caches qui sont de type Table ou Paire de colonnes de table .

    Tableau 9. Paramètres
    Nom Type Description
    catalogue Chaîne Nom du cache défini dans la table Caches inclus dans le champ d’application [sys_scoped_cache].
    key Chaîne Clé de cache.
    valide Chaîne Entrée de cache.
    Tableau 10. Renvoie
    Type Description
    Aucun

    L’exemple suivant montre comment définir et récupérer une clé appelée « abc » dans un cache nommé myCache. Le cache est associé à la table Incident [incident]. L’exemple montre également comment le cache est vidé après la mise à jour du champ Description d’un enregistrement d’incident.

    //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"));

    Sortie :

    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(Catalogue de chaînes, clé de chaîne, valeur de chaîne, ID de tableau)

    Place une entrée dans le cache et définit tous les enregistrements avec le sys_ids spécifié comme source de vidage pour cette entrée. Cette méthode est destinée aux caches de type Table ou Paire de colonnes de table .

    Tableau 11. Paramètres
    Nom Type Description
    catalogue Chaîne Catalogue à purger. Nom du cache défini dans la table Caches inclus dans le champ d’application [sys_scoped_cache].
    key Chaîne Clé de cache pour la nouvelle entrée.
    valide Chaîne Valeur pour une nouvelle entrée.
    ids Tableau Liste des sys_ids des enregistrements à utiliser comme sources de purge pour l’entrée. Ces enregistrements peuvent provenir de différentes tables.
    Tableau 12. Renvoie
    Type Description
    Aucun

    L’exemple suivant montre comment utiliser un enregistrement d’incident et d’utilisateur comme points de purge. Le INC0000060 de clé test_cache est vidé lorsque l’un des enregistrements spécifiés est mis à jour.

    // 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]);
    }

    Sortie :

    *** 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(catalogue de chaînes, clé de chaîne, valeur de chaîne, sysId de chaîne)

    Met une valeur dans une seule ligne (table) d’un cache. Utilisez cette méthode pour les caches de type Ligne de table ou Ligne de table et colonne .

    Tableau 13. Paramètres
    Nom Type Description
    catalogue Chaîne Nom du cache défini dans la table Caches inclus dans le champ d’application [sys_scoped_cache].
    key Chaîne Clé de cache.
    valide Chaîne Entrée de cache.
    sysId Chaîne Facultatif. Sys_id d’une ligne dans une table, c’est-à-dire l’enregistrement suivi.
    Tableau 14. Renvoie
    Type Description
    Aucun

    L’exemple suivant utilise un type de cache de paire de lignes de table nommé incident_cache. Le cache ajoute l’ID de l’appelant de l’incident et les entrées de cache associées à l’sys_id de l’enregistrement modifié sont effacées.

    // 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));

    Sortie :

    scoped_app: John Jones
    scoped_app: null