Вы просматриваете документацию 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 | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
элемент <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>
Количество секунд, по истечении которых запись в кэше должна стать недействительной.