ScopedCacheManager : inclus dans le périmètre
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.
- 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.
| 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. |
| 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.
| 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 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.
| 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 |
| 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 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é.
| 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. |
| 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 .
| 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 |
|---|---|
| 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 .
| 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. |
| 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 .
| 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 |
|---|---|
| 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