Как работать с ключами кеша

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

При использовании правил кеширования уникальность ключей кешированных значений обеспечивается путем настройки ключей кеша. Ключ кеша и другие настраиваемые значения позволяют надежно получать те же данные, которые были добавлены. Ключи кеша используются в правилах заполнения кеша, правилах поиска в кеше, правилах аннулирования кеша и правилах кеширования ответов.

Значения элементов конфигурации <CacheKey>/<KeyFragment>, <Scope> и <Prefix> объединяются, чтобы создать идентификатор, связанный со значением, которое вы помещаете в кеш. Вы используете ту же конфигурацию, чтобы получить значение.

Ключ кеша можно создать с помощью следующих элементов конфигурации правил кеширования:

Элемент конфигурации кеша Описание
<CacheKey>/<KeyFragment> Используйте элементы <CacheKey> и <KeyFragment> вместе, чтобы задать уникальный идентификатор для записей в кеше. Значения KeyFragment могут быть статическими литералами или задаваться с помощью переменных.
<Scope> или <Prefix> Используйте элементы <Scope> или <Prefix>, чтобы задать пространство имен для ключей кеша. <Scope> содержит список заранее определенных значений. Элемент <Prefix> переопределяет элемент <Scope> с помощью значения, которое вы выберете.

Эти значения объединяются в следующем формате: значения атрибутов <Scope> или <Prefix> отделяются от значений KeyFragment двойным подчеркиванием. Несколько значений KeyFragment также разделяются двойным подчеркиванием.

scope | prefix__keyfragment[__keyfragment]

С помощью правила кеширования ответов вы можете добавить к этому ключу кеша значения из заголовка Accept ответа.

Использование тега <CacheKey>

Элемент <CacheKey> определяет, как Edge будет создавать уникальный идентификатор (ключ) для каждой записи в кеше. Когда Edge извлекает кешированное значение, он использует ключ кеша, чтобы найти нужное значение. В правиле ResponseCache одна конфигурация определяет ключ для кеширования и извлечения. В правилах PopulateCache и LookupCache каждый элемент <CacheKey> должен быть идентичным, чтобы извлеченное из кеша значение соответствовало помещенному туда значению.

Элемент <CacheKey> может включать несколько элементов <KeyFragment>. Во время выполнения значения, указанные в элементах <KeyFragment>, объединяются с двумя символами подчеркивания между ними, чтобы составить часть ключа кеша.

Например, следующая конфигурация создает значение hello__world для использования в ключе кеша:

<CacheKey>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>

Вы также можете использовать значения переменных в ключе кеша, указав переменную в элементе <KeyFragment>, как показано ниже:

<KeyFragment ref="variable_name"/>

Например, чтобы значение ключа кеша включало тип контента запроса, выполните следующие действия:

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

В приведенной ниже конфигурации переменная request.header.Content-Type имеет значение application/json.

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

В результате будет создан ключ кеша, заканчивающийся на apiAccessToken__application/json__bar.

Список доступных переменных приведен в справочнике по переменным.

Ключи кеша, полученные из параметров запроса

Используя переменные, такие как request.queryparam.<queryparam_name> и request.querystring, вы можете настроить ключ кеша так, чтобы он включал части строки запроса. Например, в следующем URL используются два параметра запроса (param1 и param2), которые можно использовать в ключе кеша:

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

В элемент <CacheKey> можно добавить эти значения с помощью следующей конфигурации:

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

Во время выполнения ключ кеша будет включать объединенные значения параметров, как показано ниже:

other_key_parts__value1__value2

Помните, что при использовании переменных для вставки значений из параметров значения будут объединены в том порядке, в котором указаны элементы <KeyFragment>. Кроме того, обратите внимание, что Edge будет использовать только те значения, на которые вы ссылаетесь с помощью элементов <KeyFragment>. Если параметры запроса в ваших запросах различаются, эти различия не будут учитываться в ключе кеша.

В качестве альтернативы можно использовать переменную request.querystring, которая вставляет всю строку параметров буквально как часть ключа кеша. Обратите внимание, что, хотя этот метод учитывает все параметры, если порядок параметров в разных запросах будет отличаться, ключ будет разным. Другими словами, param1=value1&param2=value2 и param2=value2&param1=value1 не приводят к одному и тому же значению ключа кеша.

Список доступных переменных приведен в справочнике по переменным.

Как использовать теги <Scope> и <Prefix>

Элементы <Scope> и <Prefix> позволяют дополнить ключ префиксом пространства имен. Значения, которые они представляют, добавляются в начало ключа кеша.

По умолчанию используется элемент <Scope>. Это перечисление, значения которого варьируются от широких до узких. По умолчанию используется узкое значение. Это значение по умолчанию используется, если вы не зададите другое значение или не укажете значение элемента <Prefix>. Вы можете переопределить значение <Scope>, используя элемент <Prefix>, и таким образом указать собственное значение для пространства имен.

Например, значение <Scope> "Глобальный" (наиболее широкий диапазон) представляет название организации и среды. Если ваш прокси-сервер развернут в организации mycompany и среде prod, то в результате будет добавлено следующее значение:

Конфигурация Результат
<Scope>Global</Scope> mycompany__prod__.

Если вы используете глобальную область действия с ключом кеша, определенным выше, результат будет следующим:

Конфигурация Результат
<Scope>Global</Scope>
<CacheKey>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>
mycompany__prod__hello__world.

Как описано в правиле LookupCache, область действия можно настроить так, чтобы она была более конкретной – от глобальной до эксклюзивной. Область действия "Исключительная" является самой узкой и поэтому представляет минимальный риск конфликта пространств имен в рамках определенного кеша. Каждая запись кеша с областью действия "Эксклюзивная" имеет следующий префикс:

orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__[serializedCacheKey]

Например, ключ кеша, созданный с помощью значения "Исключительно" для <Scope>, будет выглядеть следующим образом:

apifactory__test__weatherapi__16__default__apiAccessToken