Ejemplo: Almacenamiento en caché de uso general

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Puedes usar políticas para almacenar datos en una caché de uso general para una recuperación más rápida. Mediante las siguientes políticas, tu proxy puede almacenar y recuperar datos almacenados en caché en el entorno de ejecución:

Estas políticas están diseñadas para el almacenamiento en caché general de los datos que usan los proxies.

El código de muestra de este tema se basa en el proxy de muestra de OAuth de salida de GitHub (consulta la Lista de muestras). En este ejemplo, se usa la política de caché a fin de almacenar un token de acceso de OAuth para volver a usarlo en varias llamadas salientes.

Cada tipo de política se define mediante un esquema XML (.xsd). Para referencia, los esquemas de políticas están disponibles en GitHub.

En el siguiente ejemplo, se escribe un token de acceso de OAuth en la caché con una política PopulateCache. El token de OAuth se recupera para solicitudes posteriores mediante una política LookupCache. Una vez que el token de acceso caduca, se utiliza JavaScript para recuperar un nuevo token de acceso que, a su vez, se almacena en caché con la política PopulateCache.

Propaga en la caché

Usa la política PopulateCache para escribir datos en la caché. En este ejemplo, se escribe un token de acceso de OAuth en la caché. Para obtener información de referencia de la política, consulta Política de propagación de caché.

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

Las variables se pueden propagar mediante políticas o código. La variable Source de este ejemplo se propaga mediante la siguiente llamada de JavaScript: context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Para obtener más información sobre las claves de caché, consulta Trabaja con claves de caché.

Busca datos almacenados en caché

Puedes recuperar valores almacenados en caché con la política LookupCache. La siguiente política LookupCache lee un valor de mycache y lo escribe en la variable twitter-translate.apiAccessToken. Para obtener información de referencia de la política, consulta 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>

Invalida la caché

La caché se puede invalidar de forma explícita si se especifica un encabezado HTTP. Cuando se recibe una solicitud que contiene el encabezado HTTP especificado, se vacía la caché. Para obtener información de referencia de la política, consulta Política InvalidateCache.

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