Exemplo: armazenamento em cache de uso geral

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Use políticas para armazenar dados em um cache de finalidade geral para recuperação mais rápida. Com as seguintes políticas, o proxy pode armazenar e recuperar dados armazenados em cache no ambiente de execução:

Essas políticas foram criadas para armazenamento em cache geral dos dados usados pelos seus proxies.

O código de exemplo neste tópico é baseado no proxy de amostra do OAuth de saída no GitHub (consulte a Lista de amostras). Este exemplo usa a política de cache para armazenar um token de acesso OAuth para reutilização em várias chamadas de saída.

Cada tipo de política é definido por um esquema XML (.xsd). Para referência, os esquemas de políticas (em inglês) estão disponíveis no GitHub.

No exemplo a seguir, um token de acesso OAuth é gravado no cache usando uma política "PopulateCache". O token OAuth é recuperado para solicitações subsequentes por uma política LookupCache. Quando o token de acesso expira, o JavaScript é usado para recuperar um novo token de acesso, que, por sua vez, é armazenado em cache pela política "PopulateCache".

Preencher o cache

Use a política PopulateCache para gravar dados no cache. Este exemplo grava um token de acesso do OAuth no cache. Para informações de referência de política, consulte Preencher a política de cache.

<PopulateCache name="token-cache">
    <!-- The cache to write to. -->
    <CacheResource>mycache</CacheResource>
    <!-- The source of the data, a variable containing the value. -->
    <Source>twitter-translate.apiAccessToken</Source>
    <!-- An enumeration representing a prefix for namespace scope. -->
    <Scope>Exclusive</Scope>
    <!-- A unique pointer (a flow variable value) to the data. Use this later to retrieve it. -->
    <CacheKey>
        <KeyFragment>apiAccessToken</KeyFragment>
        <KeyFragment ref="request.queryparam.client_id"></KeyFragment>
    </CacheKey>
    <!-- Entries placed into the cache with this policy will expire after 600 seconds. -->
    <ExpirySettings>
        <TimeoutInSec>600</TimeoutInSec>
    </ExpirySettings>
</PopulateCache>

As variáveis podem ser preenchidas por políticas ou por código. A variável Source neste exemplo é preenchida pela seguinte chamada de JavaScript: context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Para saber mais sobre as chaves de cache, consulte Como trabalhar com chaves de cache.

Pesquisar dados em cache

É possível recuperar valores armazenados em cache com a política LookupCache. A política LookupCache a seguir lê um valor de mycache e grava o valor na variável twitter-translate.apiAccessToken. Para informações de referência de política, consulte a política LookupCache.

<LookupCache name="token-cache">
    <!-- The cache to read from. -->
    <CacheResource>mycache</CacheResource>
    <!-- Where to assign the retrieved value - here, a variable. -->
    <AssignTo>twitter-translate.apiAccessToken</AssignTo>
    <!-- An enumeration representing a prefix for namespace scope. -->
    <Scope>Exclusive</Scope>
    <!-- The unique pointer (a flow variable value) that was used to store the data in the cache. -->

    <CacheKey>
        <KeyFragment>apiAccessToken</KeyFragment>
        <KeyFragment ref="request.queryparam.client_id"></KeyFragment>
    </CacheKey>
</LookupCache>

Invalidar o cache

O cache pode ser invalidado explicitamente com a especificação de um cabeçalho HTTP. Quando uma solicitação que contém o cabeçalho HTTP especificado é recebida, o cache é liberado. Para informações de referência de política, consulte a política LookupCache.

<InvalidateCache name="InvalidateMyCache">
    <!-- The cache to invalidate. -->
    <CacheResource>test-cache</CacheResource>
    <!-- An enumeration representing a prefix for namespace scope. -->
    <Scope>Exclusive</Scope>
    <!-- Fragments constructing the unique pointer used when 
        the data was put into the cache. -->
    <CacheKey>
        <KeyFragment>apiAccessToken</KeyFragment>
        <KeyFragment ref="request.queryparam.client_id" />
    </CacheKey>
    <PurgeChildEntries>true</PurgeChildEntries>
</InvalidateCache>