Usar claves de caché

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

Cuando usas políticas de caché, te aseguras de que las claves de valor de caché sean únicas configurando claves de caché. Una clave de caché, junto con otros valores que puedes configurar, te ofrece una forma fiable de obtener los mismos datos que has introducido. Las claves de caché se usan con las políticas PopulateCache, LookupCache, InvalidateCache y ResponseCache.

Apigee usa los valores de los elementos de configuración <Scope>, <CacheKey>/<Prefix> y <CacheKey>/<KeyFragment> para componer un valor de la clave de caché, que es un identificador asociado al valor de la caché. La composición de claves de caché funciona de la misma forma con todas las políticas de caché.

Con los siguientes elementos de configuración de la política de caché, puede crear una clave de caché:

Elemento de configuración de caché Descripción
<Scope> o <CacheKey> / <Prefix> Usa el elemento <Scope> o el elemento <CacheKey> <Prefix> para configurar un prefijo que se aplique a la clave de caché final. <Scope> enumera una lista de valores predefinidos. El elemento <CacheKey> <Prefix> sustituye <Scope> por un valor fijo que elijas.
<CacheKey>/<KeyFragment> Usa uno o varios elementos <CacheKey> <KeyFragment> combinados para especificar un identificador único para las entradas de caché. Los valores de KeyFragment pueden ser literales estáticos o definirse a partir de variables.

Apigee compone la clave de caché de dos partes: el prefijo y el fragmento compuesto, separados por un doble guion bajo.

PREFIX_PART__FRAGMENT_PART

La parte del prefijo se determina mediante el elemento <Scope> o el elemento <CacheKey> <Prefix>, si está presente. La parte del fragmento se compone de cada uno de los valores de cada elemento <KeyFragment>, unidos por dos guiones bajos.

Con la política Caché de respuestas, puedes añadir opcionalmente a esta clave de caché valores del encabezado Accept de la respuesta.

Usar <CacheKey>

El elemento <CacheKey> configura cómo creará Apigee un identificador único (una clave) para cada entrada de caché que cree. Cuando Apigee recupera el valor almacenado en caché, usa la clave de caché para localizar el valor correcto. En la política ResponseCache, una configuración define la clave tanto para el almacenamiento en caché como para la recuperación. En las políticas PopulateCache y LookupCache, cada política debe tener elementos <CacheKey> idénticos para asegurarse de que un valor obtenido de la caché corresponda a un valor introducido en ella.

El elemento <CacheKey> puede incluir un solo elemento <Prefix> opcional, así como uno o varios elementos <KeyFragment>. En el tiempo de ejecución, Apigee concatena los valores determinados de cada parte con dos guiones bajos entre ellos para formar la clave de caché.

Por ejemplo, la siguiente configuración crea un valor de myprefix__hello__world para usarlo en la clave de caché:

<CacheKey>
    <Prefix>myprefix</Prefix>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>

Puede configurar Apigee para que use una clave de caché compuesta dinámicamente haciendo referencia a la variable en un elemento <KeyFragment>, como se muestra a continuación:

<KeyFragment ref="variable_name"/>

Por ejemplo, para que el valor de la clave de caché incorpore el tipo de contenido del mensaje de solicitud, haz lo siguiente:

<KeyFragment ref="request.header.Content-Type"/>

Considera la siguiente configuración:

<CacheKey>
  <Prefix>system1</Prefix>
  <KeyFragment>apiAccessToken</KeyFragment>
  <KeyFragment ref="request.header.Content-Type" />
  <KeyFragment>bar</KeyFragment>
</CacheKey>

Si la variable request.header.Content-Type tiene el valor application/json, se generará una clave de caché system1__apiAccessToken__application/json__bar.

Puede usar variables definidas por la plataforma o personalizadas en un atributo ref.

Claves de caché derivadas de parámetros de consulta

Si usas variables como request.queryparam.<queryparam_name> y request.querystring, puedes configurar una clave de caché para que incluya partes de la cadena de consulta de una solicitud. Por ejemplo, la siguiente URL usa dos parámetros de consulta (param1 y param2) que puedes usar en tu clave de caché:

http://myaccount.apigee.net/mydata?param1=value1&param2=value2

Tu elemento <CacheKey> puede incorporar estos valores con una configuración como la siguiente:

<CacheKey>
    <KeyFragment ref="request.queryparam.param1" />
    <KeyFragment ref="request.queryparam.param2" />
<CacheKey>

En el tiempo de ejecución, la clave de caché incluiría los valores de los parámetros concatenados, como en el siguiente ejemplo:

prefix_part__value1__value2

En lugar de especificar varios parámetros de consulta distintos, puedes usar la variable request.querystring, que inserta toda la cadena de parámetros literalmente como parte de la clave de caché. Ten en cuenta que, aunque este método tiene en cuenta todos los parámetros, si el orden de los parámetros varía de una solicitud a otra, la clave será diferente. Es decir, param1=value1&param2=value2 y param2=value2&param1=value1 no dan como resultado el mismo valor de clave de caché.

Usar <Scope> y <Prefix>

Los elementos <Scope> y <CacheKey> / <Prefix> permiten organizar los valores almacenados en caché en un espacio de nombres. Apigee antepone a tu clave de caché un valor derivado de ellos. La ventaja de usar un ámbito o un prefijo en la clave de caché es que puedes invalidar todos los valores que compartan un mismo prefijo con una sola llamada a la política InvalidateCache.

El elemento <Scope> se usa de forma predeterminada. Es una enumeración cuyos valores van de general a específico, siendo el más específico el valor predeterminado. Este valor predeterminado se usa a menos que especifique otro valor o un valor de elemento <Prefix>. Puede anular el valor de <Scope> mediante un elemento <CacheKey> / <Prefix> y, de este modo, especificar un valor personalizado para el espacio de nombres.

Por ejemplo, el valor "Global" de <Scope> (el ámbito más amplio) representa el nombre de la organización y del entorno. Por lo tanto, si tu proxy se despliega en una organización llamada "mycompany" y en un entorno llamado "prod", el valor antepuesto resultante será el siguiente:

mycompany__prod__[FRAGMENT_PART]

Como se describe en la política LookupCache, el ámbito se puede configurar para aumentar la especificidad de Global a Exclusive. Un ámbito exclusivo es el más específico y, por lo tanto, representa un riesgo mínimo de colisiones de espacios de nombres en una caché determinada. Cada entrada de caché con un ámbito exclusivo tiene el siguiente prefijo:

orgName__envName__apiProxyName__deployedRevisionNumber__nameof(proxyEndpoint|targetEndpoint)__[serializedCacheKey]

A continuación se muestran algunos ejemplos. En estos ejemplos se da por hecho que la revisión 16 de tu proxy llamado "weatherapi" se ha desplegado en una organización llamada "mycompany" y en un entorno llamado "prod", que el nombre de proxyEndpoint es "default" y que la política de caché está asociada a un flujo en el proxyEndpoint.

Configuración Resultado
<Scope>Global</Scope>
<CacheKey>
  <KeyFragment>hello</KeyFragment>
  <KeyFragment>world</KeyFragment>
<CacheKey>
mycompany__prod__hello__world.
<Scope>Exclusive</Scope>
<CacheKey>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>
mycompany__prod__weatherapi__16__default__hello__world
<Scope>Exclusive</Scope>
<CacheKey>
    <Prefix>system1</Prefix>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>
system1__hello__world

En este caso, el elemento <Prefix> anula <Scope>, por lo que el espacio de nombres system1 aparece en el resultado.