ScopedCacheManager - com escopo
A API ScopedCacheManager fornece métodos para recuperar, definir e liberar dados de cache para aplicações com escopo.
Esta API requer o plug-in Scoped Cache (com.glide.scopedcache) e é executada no namespace sn_scoped_cache. O plug-in é instalado e ativado por padrão.
Esses métodos exigem que um ou mais caches com escopo e pares de cache com escopo sejam definidos. Para obter mais informações sobre como criar caches com escopo, consulte o Guia do desenvolvedor da API ScopedCacheManager.
- Cache de cadeias de caracteres em aplicações com escopo que residem na memória entre transações.
- Armazenar em cache os dados da aplicação com escopo na memória e liberar esses dados com base nas mudanças na tabela subjacente.
- Definir e usar dados de cache fora do ciclo de vida da transação.
- Armazenando em cache a saída de operações ou cálculos dispendiosos para acesso rápido no futuro.
ScopedCacheManager – FlushScopedCache(Cadeia de caracteres do catálogo, Chave da cadeia de caracteres)
Limpa um cache inteiro ou uma única entrada de um cache.
| Nome | Tipo | Descrição |
|---|---|---|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo [sys_scoped_cache]. |
| chave | Cadeia de caracteres | Opcional. Chave de cache. Defina este parâmetro para liberar uma única entrada de um cache. |
| Tipo | Descrição |
|---|---|
| Nenhum |
O exemplo a seguir mostra como liberar a chave "abc" de um cache chamado myCache. Para liberar o cache inteiro, deixe de fora o parâmetro-chave.
sn_scoped_cache.ScopedCacheManager.flushScopedCache("myCache", "abc");
ScopedCacheManager – get(Cadeia de caracteres catálogo, Chave de cadeia de caracteres)
Obtém um valor de um cache.
| Nome | Tipo | Descrição |
|---|---|---|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo [sys_scoped_cache]. |
| chave | Cadeia de caracteres | Chave de cache. |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | Entrada de cache. |
O exemplo a seguir mostra como contar o número de registros de incidentes com descrições resumidas com um número de caracteres maior que a chave (50). Nesse caso, há seis registros de incidentes com descrições resumidas de mais de 50 caracteres. Este valor é armazenado no cache como uma cadeia de caracteres reutilizável, portanto, você não precisa fazer um cálculo sempre que quiser recuperar o valor.
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"));
Saída:
scoped_app: 6
ScopedCacheManager – getCacheEntryDetails(Cadeia de caracteres catálogo, Chave de cadeia de caracteres)
Obtém detalhes de entrada de cache, incluindo tamanho de byte, tipo de objeto e valor de entrada.
| Nome | Tipo | Descrição |
|---|---|---|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo [sys_scoped_cache].
O nome do catálogo deve ser prefixado com o nome do escopo e um caractere de acento circunflexo. Por exemplo, "test_cache" no escopo global é prefixado como |
| chave | Cadeia de caracteres | Chave de cache. |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | Cadeia de caracteres no formato<ObjectType> (<EntrySize> ):<Value.toString()> . |
O exemplo a seguir mostra como exibir detalhes de entrada de cache para um cache com escopo chamado test_cache.
sn_scoped_cache.ScopedCacheManager.put("test_cache", "key1", "val1");
gs.info(sn_scoped_cache.ScopedCacheManager.getCacheEntryDetails("global^test_cache", "key1"));
Saída:
java.lang.String (48):
val1
ScopedCacheManager – prefixFlush(Cadeia de caracteres catálogo, Cadeia de caracteres prefixo)
Limpa todas as entradas de cache que têm chaves que começam com um prefixo especificado.
| Nome | Tipo | Descrição |
|---|---|---|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo [sys_scoped_cache]. |
| prefixo | Cadeia de caracteres | Prefixo pelo qual pesquisar chaves ao limpar o cache. |
| Tipo | Descrição |
|---|---|
| Nenhum |
O exemplo a seguir mostra como liberar valores de cache para chaves com o prefixo 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"));
Saída:
*** Script: null
*** Script: null
*** Script: val3
ScopedCacheManager – put(Cadeia de caracteres catálogo, Chave de cadeia de caracteres, Valor de cadeia de caracteres)
Coloca um valor em um cache com escopo para caches que são do tipo Tabela ou Coluna de tabela.
| Nome | Tipo | Descrição |
|---|---|---|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo [sys_scoped_cache]. |
| chave | Cadeia de caracteres | Chave de cache. |
| valor | Cadeia de caracteres | Entrada de cache. |
| Tipo | Descrição |
|---|---|
| Nenhum |
O exemplo a seguir mostra como definir e recuperar uma chave chamada "abc" para um cache chamado myCache. O cache é emparelhado com a tabela Incidente [incidente]. O exemplo também mostra como o cache é liberado após atualizar o campo de descrição de um registro de incidente.
//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"));
Saída:
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(Cadeia de caracteres catálogo, Chave de cadeia de caracteres, Valor de cadeia de caracteres, IDs de matriz)
Coloca uma entrada no cache e define todos os registros com os sys_ids especificados como uma origem de liberação para essa entrada. Este método se destina a caches que são do tipo Tabela ou Par de coluna de tabela.
| Nome | Tipo | Descrição |
|---|---|---|
| catálogo | Cadeia de caracteres | O catálogo a ser liberado. Nome do cache definido na tabela Caches com escopo [sys_scoped_cache]. |
| chave | Cadeia de caracteres | Chave de cache para a nova entrada. |
| valor | Cadeia de caracteres | Valor da nova entrada. |
| IDs | Matriz | Lista de sys_ids dos registros a serem usados como origens de liberação para a entrada. Esses registros podem ser de tabelas diferentes. |
| Tipo | Descrição |
|---|---|
| Nenhum |
O exemplo a seguir mostra como usar um incidente e o registro do usuário como pontos de liberação. A chave test_cache INC0000060 é liberada quando um dos registros especificados é atualizado.
// 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]);
}
Saída:
*** 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(cadeia de caracteres catalog, String key, String value, String sysId)
Coloca um valor em uma única linha (tabela) de um cache. Use este método para caches que sejam do tipo Linha de tabela ou Linha de tabela e coluna do tipo par.
| Nome | Tipo | Descrição |
|---|---|---|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo [sys_scoped_cache]. |
| chave | Cadeia de caracteres | Chave de cache. |
| valor | Cadeia de caracteres | Entrada de cache. |
| sysId | Cadeia de caracteres | Opcional. Sys_id de uma linha em uma tabela, ou seja, o registro que está sendo rastreado. |
| Tipo | Descrição |
|---|---|
| Nenhum |
O exemplo a seguir usa um tipo de cache de par de linhas de tabela chamado incident_cache. O cache adiciona o ID do chamador do incidente e as entradas de cache associadas ao sys_id do registro alterado são apagadas.
// 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));
Saída:
scoped_app: John Jones
scoped_app: null