Политика ResponseCache

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

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

Вероятно, вы найдете ResponseCache наиболее полезным, если серверные данные, используемые вашим API, обновляются только периодически. Например, представьте, что у вас есть API, который предоставляет данные прогноза погоды, обновляемые только каждые десять минут. Используя ResponseCache для возврата кэшированных ответов между обновлениями, вы можете уменьшить количество запросов, поступающих на серверную часть. Это также уменьшает количество сетевых переходов.

Для краткосрочного кэширования общего назначения рекомендуется использовать политику заполнения кэша . Эта политика используется вместе с политикой кэша поиска (для чтения записей кэша) и политикой недействительности кэша (для признания записей недействительными).

Посмотрите это видео, чтобы познакомиться с политикой кэша ответов.

Образцы

10-минутный кэш

В этом примере показано, как хранить кэшированные ответы в течение 10 минут.

Представьте, что у вас есть API по следующему URL:

http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778

Вы используете параметр запроса w в качестве ключа кэша. Apigee Edge проверяет значение параметра запроса w при каждом получении запроса. Если в кэше присутствует действительный (то есть не истекший) ответ, то кэшированное ответное сообщение возвращается запрашивающему клиенту.

Теперь представьте, что у вас есть политика ResponseCache, настроенная следующим образом.

<ResponseCache name="ResponseCache">
    <CacheKey>
        <KeyFragment ref="request.queryparam.w" />
    </CacheKey>
    <ExpirySettings>
        <TimeoutInSeconds>600</TimeoutInSeconds>
    </ExpirySettings>
</ResponseCache>

Когда прокси-сервер API впервые получает сообщение запроса для следующего URL-адреса, ответ кэшируется. При втором запросе в течение 10 минут происходит поиск в кеше: кэшированный ответ возвращается в приложение без пересылки запроса во внутреннюю службу.

http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778

Пропустить поиск в кэше

В следующем примере показано, как пропустить поиск в кэше и обновить кэш. См. также это видео об использовании SkipCacheLookup.

Необязательное условие SkipCacheLookup (если оно настроено) оценивается в пути запроса. Если условие оценивается как истинное, то поиск в кэше пропускается и кэш обновляется.

Обычное использование условного обновления кэша — это условие, которое определяет конкретный заголовок HTTP, который приводит к тому, что условие оценивается как истинное. Клиентское приложение со сценарием можно настроить на периодическую отправку запроса с соответствующим заголовком HTTP, явно вызывая обновление кэша ответов.

Например, представьте себе вызов API по следующему URL-адресу:

'http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778' -H "bypass-cache:true"

Теперь представьте себе следующую политику ResponseCache, настроенную на этом прокси. Обратите внимание, что условие обхода кэша имеет значение true.

<ResponseCache name="ResponseCache">
    <CacheKey>
        <KeyFragment ref="request.queryparam.w" />
    </CacheKey>
    <!-- Explicitly refresh the cached response -->
    <SkipCacheLookup>request.header.bypass-cache = "true"</SkipCacheLookup>
    <ExpirySettings>
        <TimeoutInSeconds>600</TimeoutInSeconds>
    </ExpirySettings>
</ResponseCache>

Дополнительные сведения об условиях см. в разделе Переменные и условия потока .

Ссылка на элемент

Ссылка на элемент описывает элементы и атрибуты политики.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
    <DisplayName>Response Cache 1</DisplayName>
    <Properties/>
    <CacheKey>
        <Prefix/>
        <KeyFragment ref="request.uri" />
    </CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
        <ExpiryDate/>
        <TimeOfDay/>
        <TimeoutInSeconds ref="flow.variable.here">300</TimeoutInSeconds>
    </ExpirySettings>
    <CacheResource>cache_to_use</CacheResource>
    <CacheLookupTimeoutInSeconds/>
    <ExcludeErrorResponse/>
    <SkipCacheLookup/>
    <SkipCachePopulation/>
    <UseAcceptHeader/>
    <UseResponseCacheHeaders/>
</ResponseCache>

Атрибуты <ResponseCache>

<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">

В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:

Атрибут Описание По умолчанию Присутствие
name

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

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

истинный Необязательный
async

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

Элемент <CacheKey>

Настраивает уникальный указатель на фрагмент данных, хранящихся в кеше.

Размер ключей кэша ограничен 2 КБ.

<CacheKey>
    <Prefix>string</Prefix>
    <KeyFragment ref="variable_name" />
    <KeyFragment>literal_string</KeyFragment>
</CacheKey>

По умолчанию:

Н/Д

Присутствие:

Необходимый

Тип:

Н/Д

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

Во время выполнения к значениям <KeyFragment> добавляется либо значение элемента <Scope> , либо значение <Prefix> . Например, следующее приводит к получению ключа кэша UserToken__apiAccessToken__ < value_of_client_id> :

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

Вы используете элемент <CacheKey> в сочетании с <Prefix> и <Scope> . Дополнительную информацию см. в разделе Работа с ключами кэша .

Элемент <CacheLookupTimeoutInSeconds>

Указывает количество секунд, по истечении которых неудачный поиск в кэше будет считаться промахом в кэше. Если это происходит, поток возобновляется по пути кэш-промаха.

<CacheLookupTimeoutInSeconds>30</CacheLookupTimeoutInSeconds>

По умолчанию:

30

Присутствие:

Необязательный

Тип:

Целое число

Элемент <CacheResource>

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

<CacheResource>cache_to_use</CacheResource>

По умолчанию:

Н/Д

Присутствие:

Необязательный

Тип:

Нить

Дополнительные сведения о настройке кэшей см. в разделе Создание и редактирование кэша среды .

Элемент <CacheKey>/<KeyFragment>

Указывает значение, которое должно быть включено в ключ кэша, создавая пространство имен для сопоставления запросов с кэшированными ответами.

<KeyFragment ref="variable_name"/>
<KeyFragment>literal_string</KeyFragment>

По умолчанию:

Н/Д

Присутствие:

Необязательный

Тип:

Н/Д

Это может быть ключ (статическое имя, которое вы предоставляете) или значение (динамическая запись, заданная путем ссылки на переменную). Все указанные фрагменты (плюс префикс) объединяются для создания ключа кэша.

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

Вы используете элемент <KeyFragment> в сочетании с <Prefix> и <Scope> . Дополнительную информацию см. в разделе Работа с ключами кэша .

Атрибуты

Атрибут Тип По умолчанию Необходимый Описание
ссылка нить Нет

Переменная, из которой можно получить значение. Не следует использовать, если этот элемент содержит буквальное значение.

Элемент <CacheKey>/<Prefix>

Указывает значение, которое будет использоваться в качестве префикса ключа кэша.

<Prefix>prefix_string</Prefix>

По умолчанию:

Н/Д

Присутствие:

Необязательный

Тип:

Нить

Используйте это значение вместо <Scope> если вы хотите указать собственное значение, а не значение, перечисляемое <Scope> . Если определено, <Prefix> добавляет значение ключа кэша к записям, записываемым в кэш. Значение элемента <Prefix> переопределяет значение элемента <Scope> .

Вы используете элемент <Prefix> в сочетании с <CacheKey> и <Scope> . Дополнительную информацию см. в разделе Работа с ключами кэша .

Элемент <ExcludeErrorResponse>

В настоящее время по умолчанию эта политика кэширует ответы HTTP с любым возможным кодом состояния. Это означает, что кэшируются как успешные, так и ошибочные ответы. Например, ответы с кодами состояния 2xx и 3xx кэшируются по умолчанию.

Установите для этого элемента значение true , если вы не хотите кэшировать целевые ответы с кодами состояния ошибок HTTP; только ответы с кодами состояния от 200 до 205 будут кэшироваться, если этот элемент имеет значение true. Это единственные коды состояния HTTP, которые Edge считает кодами «успеха», и вы не можете изменить эту ассоциацию.

Обсуждение шаблонов Response Cache, в которых полезен этот элемент, можно найти в этом сообщении сообщества .

Примечание. В будущем выпуске (который будет определен позднее) значение по умолчанию для этого элемента изменится на true. Подробности см. в примечаниях к выпуску Apigee .

<ExcludeErrorResponse>true</ExcludeErrorResponse>

По умолчанию:

ЛОЖЬ

Присутствие:

Необязательный

Тип:

логическое значение

Элемент <ExpirySettings>

Указывает, когда должен истечь срок действия записи кэша. Если он присутствует, <TimeoutInSeconds> переопределяет <TimeOfDay> и <ExpiryDate> .

<ExpirySettings>
  <TimeOfDay ref="time_variable">expiration_time</TimeOfDay>
  <TimeoutInSeconds ref="duration_variable">seconds_until_expiration</TimeoutInSeconds>
  <ExpiryDate ref="date_variable">expiration_date</ExpiryDate>
</ExpirySettings>

По умолчанию:

Н/Д

Присутствие:

Необходимый

Тип:

Н/Д

Элемент <ExpirySettings> /<ExpiryDate>

Указывает дату истечения срока действия записи кэша. Используйте форму mm-dd-yyyy . Если он присутствует, родственный элемент этого элемента, <TimeoutInSeconds> , переопределяет <ExpiryDate> .

<ExpirySettings>
    <ExpiryDate ref="{date_variable}">expiration_date</ExpiryDate>
</ExpirySettings>

По умолчанию:

Н/Д

Присутствие:

Необязательный

Тип:

Нить

Атрибуты

<ExpiryDate ref="" />
Атрибут Описание По умолчанию Присутствие Тип
ссылка

Переменная, из которой можно получить значение. Не следует использовать, если этот элемент содержит буквальное значение.

Н/Д Необязательный Нить

Элемент <ExpirySettings>/<TimeOfDay>

Время суток, в которое должна истечь запись кэша. Используйте форму hh:mm:ss . Если он присутствует, родственный элемент этого элемента, <TimeoutInSeconds> , переопределяет <TimeOfDay> .

Введите время суток в формате ЧЧ:мм:сс, где ЧЧ представляет час в 24-часовом формате. Например, 14:30:00 для 14:30 дня.

Для времени суток локаль и часовой пояс по умолчанию будут различаться в зависимости от того, где выполняется код (что невозможно узнать при настройке политики). Информацию о настройке языкового стандарта см. в разделе Создание и редактирование кэша среды .

<ExpirySettings>
    <TimeOfDay ref="time_variable">expiration_time</TimeOfDay>
</ExpirySettings>

По умолчанию:

Н/Д

Присутствие:

Необязательный

Тип:

Нить

Атрибуты

Атрибут Описание По умолчанию Присутствие Тип
ссылка Переменная со значением времени истечения срока действия. Н/Д Необязательный Нить

Элемент <ExpirySettings>/<TimeoutInSec>

Количество секунд, по истечении которых запись в кэше должна истечь.