ScopedCacheManager : inclus dans l’étendue
L’API ScopedCacheManager fournit des méthodes pour récupérer, définir et purger les 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 paires de caches dans le champ d’application. Pour plus d’informations sur la création de caches délimités, consultez le Guide du développeur d’API ScopedCacheManager.
- Chaînes de mise en cache dans les applications incluses dans le périmètre qui vivent en mémoire dans les transactions.
- Mise en cache des données d’application incluse dans le périmètre en mémoire et purge 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 des résultats 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 un cache entier ou une seule entrée d’un cache.
| 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 purger une seule entrée d’un cache. |
| Type | Description |
|---|---|
| Aucun |
L’exemple suivant montre comment vider la clé « abc » d’un cache nommé myCache. Pour vider tout le cache, omettez le paramètre clé.
sn_scoped_cache.ScopedCacheManager.flushScopedCache("myCache", "abc");
ScopedCacheManager – get(String catalog, String key)
Obtient une valeur à partir d’un cache.
| 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. |
| 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 de brèves descriptions de plus de 50 caractères. Cette valeur est stockée dans le cache en tant que chaîne réutilisable, vous n’avez donc pas à effectuer de 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 en octets, le type d’objet et la valeur d’entrée.
| 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 caractère de caret. Par exemple, « test_cache » dans le périmètre global est précédé du préfixe |
| key | Chaîne | Clé de cache. |
| 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)
Purge toutes les entrées de cache dont les clés commencent par un préfixe spécifié.
| 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 permettant de rechercher des clés lors de la purge du cache. |
| Type | Description |
|---|---|
| Aucun |
L’exemple suivant montre comment purger 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(String catalog, String key, String value)
Met une valeur dans un cache inclus dans le champ d’application pour les caches qui sont de type Table ou Colonne de table .
| 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. |
| 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 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)
Met une entrée dans le cache et définit tous les enregistrements avec la sys_ids spécifiée 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 .
| 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. |
| ids | Tableau | Liste des sys_ids des enregistrements à utiliser comme sources de vidage pour l’entrée. Ces enregistrements peuvent provenir de différentes tables. |
| Type | Description |
|---|---|
| Aucun |
L’exemple suivant montre comment utiliser un incident et un enregistrement utilisateur comme points de vidage. Le INC0000060 de clé de 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)
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 .
| 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. |
| 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 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