ScopedCacheManager - Com escopo

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 7 min. de leitura
  • . ScopedCacheManager A API fornece métodos para recuperar, definir e limpar dados de cache para aplicações com escopo.

    Esta API requer o plug-in Cache com escopo (com.glide.scopedcache) e é executada no sn_scoped_cache namespace. 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 ScopedCacheManager API Guia do desenvolvedor .

    O uso desta API com caches com escopo oferece várias vantagens, incluindo:
    • Cadeias de caracteres de cache em aplicações com escopo que vivem na memória entre transações.
    • Armazenando em cache dados da aplicação com escopo na memória e liberando 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 caros para acesso rápido no futuro.

    ScopedCacheManager – flushScopedCache(catálogo de cadeia de caracteres, chave de cadeia de caracteres)

    Limpa um cache inteiro ou uma única entrada de um cache.

    Tabela 1. Parâmetros
    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 limpar uma única entrada de um cache.
    Tabela 2. Retornos
    Tipo Descrição
    Nenhum(a)

    O exemplo a seguir mostra como limpar a chave "abc" de um cache chamado myCache. Para limpar todo o cache, deixe de fora o parâmetro de chave.

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

    ScopedCacheManager – GET (catálogo de cadeia de caracteres, chave de cadeia de caracteres)

    Obtém um valor de um cache.

    Tabela 3. Parâmetros
    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.
    Tabela 4. Retornos
    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á 6 registros de incidente com descrições resumidas com 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(catálogo de cadeia de caracteres, chave de cadeia de caracteres)

    Obtém detalhes da entrada de cache, incluindo tamanho de byte, tipo de objeto e valor de entrada.

    Tabela 5. Parâmetros
    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. Por exemplo, "test_cache" no escopo global é prefixado como "global test_cache" .

    chave Cadeia de caracteres Chave de cache.
    Tabela 6. Retornos
    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(Catálogo de cadeia de caracteres, prefixo de cadeia de caracteres)

    Limpa todas as entradas de cache que têm chaves que começam com um prefixo especificado.

    Tabela 7. Parâmetros
    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.
    Tabela 8. Retornos
    Tipo Descrição
    Nenhum(a)

    O exemplo a seguir mostra como limpar valores de cache para chaves com o prefixo . .

    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 (catálogo de cadeia de caracteres, chave de cadeia de caracteres, valor de cadeia de caracteres)

    Coloca um valor em um cache com escopo para caches que são Tabela ou Coluna da tabela tipos de pares.

    Tabela 9. Parâmetros
    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.
    Tabela 10. Retornos
    Tipo Descrição
    Nenhum(a)

    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 é limpo após a atualização do 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 (catálogo de cadeia de caracteres, chave de cadeia de caracteres, valor de cadeia de caracteres, ids de matriz)

    Coloca uma entrada no cache e define todos os registros com o sys_ids especificado como uma origem de flush para essa entrada. Este método é destinado a caches que são Tabela ou Coluna da tabela tipos de pares.

    Tabela 11. Parâmetros
    Nome Tipo Descrição
    catálogo Cadeia de caracteres O catálogo a ser limpo. 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 flush para a entrada. Esses registros podem ser de tabelas diferentes.
    Tabela 12. Retornos
    Tipo Descrição
    Nenhum(a)

    O exemplo a seguir mostra como usar um incidente e um registro de usuário como pontos de limpeza. A chave test_cache INC0000060 é limpa 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(catálogo de cadeia de caracteres, chave de cadeia de caracteres, valor de cadeia de caracteres, SYSID de cadeia de caracteres)

    Coloca um valor em uma única linha (tabela) de um cache. Use este método para caches que são Linha da tabela ou Linha e coluna da tabela tipos de pares.

    Tabela 13. Parâmetros
    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.
    Tabela 14. Retornos
    Tipo Descrição
    Nenhum(a)

    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 limpas.

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