You're viewing Apigee Edge documentation.
Go to the
Apigee X documentation. info
When using cache policies, you ensure the uniqueness of cached value keys by configuring cache keys. A cache key, along with other values you can configure, gives you a reliable way to get out the same data that you put in. You use cache keys with the Populate Cache policy, LookupCache policy, InvalidateCache policy, and Response Cache policy.
The values of configuration elements --
<CacheKey>
/<KeyFragment>
, <Scope>
, and
<Prefix>
-- are concatenated to create an identifier that is associated with
the value you put into the cache. You use this same configuration to retrieve the value.
With the following cache policy configuration elements, you can create a cache key:
Cache Configuration Element | Description |
---|---|
<CacheKey> / <KeyFragment> |
Use <CacheKey> <KeyFragment> elements combined to
specify a unique identifier for cache entries. KeyFragment values can be static literals or
set from variables. |
<Scope> or <Prefix> |
Use the <Scope> or <Prefix> elements to further
namespace cache keys. <Scope> enumerates a list of predefined values.
The <Prefix> element overrides <Scope> with a value
of your own choosing. |
These values are concatenated in the following form, with <Scope>
or
<Prefix>
values separated from KeyFragment values by double-underscores.
Multiple KeyFragment values are also separated by double underscores.
scope | prefix__keyfragment[__keyfragment]
With the Response Cache policy, you can optionally append this cache key with values from the response Accept header.
Using <CacheKey>
The <CacheKey>
element configures how Edge will create a unique identifier
(a key) for each cache entry it creates. When Edge retrieves the cached value, it uses the cache
key to locate the correct value. In the ResponseCache policy, one configuration defines the key
for both caching and retrieval. In the PopulateCache and LookupCache policies, each policy must
have identical <CacheKey>
elements to ensure that a value retrieved from the
cache corresponds to a value put there.
The <CacheKey>
element can include multiple
<KeyFragment>
elements. At runtime, the values specified by
<KeyFragment>
elements are concatenated with two underscores between them in
to make up part of the cache key.
For example, the following configuration creates a value of hello__world
for use
in the cache key:
<CacheKey> <KeyFragment>hello</KeyFragment> <KeyFragment>world</KeyFragment> <CacheKey>
You can also use a variable values in a cache key by referencing the variable in a
<KeyFragment>
element, as shown here:
<KeyFragment ref="variable_name"/>
For example, to make the cache key value incorporate the Content-Type of the request message, you do as follows:
<KeyFragment ref="request.header.Content-Type"/>
In the following configuration, the request.header.Content-Type
variable has the
value application/json
.
<CacheKey> <KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.header.Content-Type" /> <KeyFragment>bar</KeyFragment> </CacheKey>
This result a cache key ending with apiAccessToken__application/json__bar
.
For a list of the variables you can use, see Variables reference.
Cache keys derived from query parameters
Using variables such as request.queryparam.<queryparam_name> and request.querystring, you can configure a cache key so that the key includes parts of a request's query string. For example, the following URL uses two query parameters -- param1 and param2 -- that you can use in your cache key:
http://myaccount.apigee.net/mydata?param1=value1¶m2=value2
Your <CacheKey>
element can incorporate these values with a configuration
such as the following:
<CacheKey> <KeyFragment ref="request.queryparam.param1" /> <KeyFragment ref="request.queryparam.param2" /> <CacheKey>
At runtime, the cache key would include the param values concatenated, as in the following:
other_key_parts__value1__value2
Keep in mind that when you use variables to insert values from parameters, the values will be
concatenated in the order suggested by the <KeyFragment>
element order. Also,
note that Edge will use only those values that you specifically reference with
<KeyFragment>
elements. If your request query parameter lists vary, the
variations won't be accounted for in the cache key.
An alternative is to use the request.querystring variable, which inserts the entire string of
parameters literally as part of the cache key. Keep in mind that while this method accounts for
all of the parameters, if the order of parameters varies from one request to the next then the
key will be different. In other words, param1=value1¶m2=value2
and
param2=value2¶m1=value1
don't result in the same cache key value.
For a list of the variables you can use, see Variables reference.
Using <Scope> and <Prefix>
The <Scope>
and <Prefix>
elements provide a way to
augment the key with a namespace prefix. The values they represent are prepended to your cache
key.
The <Scope>
element is used by default. It is an enumeration whose values
range from broad to narrow, with the narrowest as the default. This default value is used unless
you specify another value or specify a <Prefix>
element value. You can
override the <Scope>
value by using a <Prefix>
element, and
so specify a custom value for namespacing.
For example, the <Scope>
value "Global" -- the broadest scope -- represents
the organization and environment name. So if your proxy is deployed in an organization called
'mycompany' and an environment named 'prod', the resulting preprended value will be the
following:
Configuration | Result |
---|---|
<Scope>Global</Scope> |
mycompany__prod__ . |
If you're using the Global scope with the cache key defined above, the result is as follows:
Configuration | Result |
---|---|
<Scope>Global</Scope> <CacheKey> <KeyFragment>hello</KeyFragment> <KeyFragment>world</KeyFragment> <CacheKey> |
mycompany__prod__hello__world . |
As described in LookupCache policy, the scope can be configured for increasing specificity from Global to Exclusive. An Exclusive scope is the most specific, and therefore represents minimal risk of namespace collisions within a given cache. Each cache entry with an Exclusive scope is prefixed in the following form:
orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__[serializedCacheKey]
For example, a cache key created from using the Exclusive value for <Scope>
would look like the following:
apifactory__test__weatherapi__16__default__apiAccessToken