ScopedCacheManager : inclus dans le périmètre

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 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 requiert 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 incluses dans le champ d’application. Pour plus d’informations sur la création de caches inclus dans le périmètre, 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 :
    • Mise en cache des chaînes dans les applications incluses dans le périmètre qui résident en mémoire entre les transactions.
    • Mettre en cache les données d’application incluses dans le périmètre dans la mémoire et purger ces données en fonction des changements apportés à la table sous-jacente.
    • Définir et utiliser les 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 la totalité du 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
    Néant

    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 – get(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 dont le nombre de caractères est 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 forme de 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 de l’entrée de cache, y compris la taille des 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 périmètre et d’un accent circonflexe. Par exemple, « test_cache » dans le périmètre global est précédé de « global^test_cache ».

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

    L’exemple suivant montre comment afficher les détails d’entrée de cache pour un cache inclus dans le périmètre 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
    Néant

    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)

    Place 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
    Néant

    L’exemple suivant montre comment définir et récupérer une clé appelée « abc » dans un cache nommé myCache. La table cache est associée à la table Incident [incident]. L’exemple montre également comment le cache est vidé après la mise à jour du champ de 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 l’sys_ids spécifié comme source de purge 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 de la nouvelle entrée.
    ID 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
    Néant

    L’exemple suivant montre comment utiliser un incident et un enregistrement d’utilisateur comme points de purge. La clé test_cache INC0000060 est vidée 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)

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

    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
    Néant

    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 aux 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