Политика ResponseCache

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

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

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

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

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

Образцы

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, настроенную на этом прокси-сервере. Обратите внимание, что условие bypass-cache установлено в значение 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; если этот элемент имеет значение true, будут кэшироваться только ответы с кодами состояния от 200 до 205. Это единственные коды состояния HTTP, которые Edge считает кодами «успеха», и вы не можете изменить эту связь.

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

Примечание: В одной из будущих версий (дата выхода которой будет определена позже) значение по умолчанию для этого элемента изменится на 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> .

Время суток указывается в формате HH:mm:ss, где HH обозначает час в 24-часовом формате. Например, 14:30:00 означает 14:30.

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

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

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

Н/Д

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

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

Тип:

Нить

Атрибуты

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

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

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