Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Настраивает, как кешированные значения должны записываться во время выполнения.
Правило Populate Cache предназначено для записи записей в краткосрочный кеш общего назначения. Он используется вместе с правилом "Поиск в кеше" (для чтения записей кеша) и правилом "Аннулировать кеш" (для аннулирования записей).
Чтобы узнать, как кешировать ответы внутренних ресурсов, ознакомьтесь с правилами кеширования ответов.
Сведения об элементах
Ниже перечислены элементы, которые можно настроить в этом правиле.
<PopulateCache async="false" continueOnError="false" enabled="true" name="Populate-Cache-1">
<DisplayName>Populate Cache 1</DisplayName>
<Properties/>
<CacheKey>
<Prefix/>
<KeyFragment ref=""/>
</CacheKey>
<!-- Omit this element if you're using the included shared cache. -->
<CacheResource/>
<Scope>Exclusive</Scope>
<ExpirySettings>
<TimeoutInSeconds>300</TimeoutInSeconds>
</ExpirySettings>
<Source>flowVar</Source>
</PopulateCache>Атрибуты <PopulateCache>
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
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> создает название для каждого фрагмента данных, хранящихся в кеше.
Во время выполнения к значениям <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>. Подробнее о работе с ключами кеша…
Элемент <CacheResource>
Указывает, в каком кеше должны храниться сообщения.
Если это правило (и соответствующие правила LookupCache и InvalidateCache) использует встроенный общий кеш, этот элемент можно не указывать.
<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>. Подробнее о работе с ключами кеша…
Атрибуты
| Атрибут | Тип | По умолчанию | Обязательно | Описание |
|---|---|---|---|---|
| ref | string | Нет |
Переменная, значение которой нужно получить. Не следует использовать, если этот элемент содержит литеральное значение. |
Элемент <CacheKey>/<Prefix>
Указывает значение, которое будет использоваться в качестве префикса ключа кеша.
<Prefix>prefix_string</Prefix>
|
По умолчанию: |
Н/Д |
|
Присутствие |
Необязательно |
|
Тип: |
Строка |
Используйте это значение вместо <Scope>, если вы хотите указать собственное значение, а не значение, перечисленное в <Scope>. Если задано, <Prefix> добавляет значение ключа кеша для записей, которые сохраняются в кеше. Значение элемента <Prefix> переопределяет значение элемента <Scope>.
Элемент <Prefix> используется вместе с элементами <CacheKey> и <Scope>. Подробнее о работе с ключами кеша…
Элемент <ExpirySettings>
Указывает, когда должна истечь запись в кеше. Если он присутствует, то <TimeoutInSeconds> переопределяет <TimeOfDay> и <ExpiryDate>.
<ExpirySettings> <!-- use exactly one of the following child elements --> <TimeoutInSeconds ref="duration_variable">seconds_until_expiration</TimeoutInSeconds> <ExpiryDate ref="date_variable">expiration_date</ExpiryDate> <TimeOfDay ref="time_variable">expiration_time</TimeOfDay> </ExpirySettings>
|
По умолчанию: |
Н/Д |
|
Присутствие |
Обязательно |
|
Тип: |
Н/Д |
Дочерние элементы <ExpirySettings>
Используйте только один дочерний элемент. В таблице ниже приведены описания дочерних элементов <ExpirySettings>:
| Дочерний элемент | Описание |
|---|---|
<TimeoutInSeconds> |
Количество секунд, по истечении которых запись в кеше должна стать недействительной. <ExpirySettings> <TimeoutInSeconds ref="var-containing-duration">expiry</TimeoutInSeconds> </ExpirySettings> Этот элемент заменяет элемент |
<ExpiryDate> |
Указывает дату, когда запись в кеше должна устареть. Укажите строку в формате <ExpirySettings> <ExpiryDate ref="var-containing-date">expiry</ExpiryDate> </ExpirySettings> Если указанная дата уже прошла, правило применит к записи в кеше максимальное время жизни. Максимальный срок – 30 дней. |
<TimeOfDay> |
Указывает время суток, когда запись в кеше должна устареть.
Укажите строку в формате <ExpirySettings> <TimeOfDay ref="var-containing-time">expiry</TimeOfDay> </ExpirySettings> |
Укажите только один из возможных дочерних элементов. Если вы укажете несколько элементов, приоритет будет следующим:TimeoutInSeconds, ExpiryDate, TimeOfDay.
Если в любом из перечисленных выше дочерних элементов <ExpirySettings> указать необязательный атрибут ref, правило получит значение срока действия из названной переменной контекста. Если переменная не определена, правило использует текстовое значение дочернего элемента.
Элемент <Scope>
Перечисление, используемое для создания префикса ключа кеша, если в элементе <CacheKey> не указан элемент <Prefix>.
<Scope>scope_enumeration</Scope>
|
По умолчанию: |
"Эксклюзив" |
|
Присутствие |
Необязательно |
|
Тип: |
Строка |
Настройка <Scope> определяет ключ кеша, который добавляется в начало в соответствии со значением <Scope>. Например, если область действия задана как Exclusive, ключ кеша будет иметь следующий вид:
orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__ [ serializedCacheKey ]
Если в элементе <CacheKey> присутствует элемент <Prefix>, он имеет приоритет над значением элемента <Scope>. Допустимые значения перечислены ниже.
Элемент <Scope> используется вместе с элементами <CacheKey> и <Prefix>. Подробнее о работе с ключами кеша…
Допустимые значения
Global |
Ключ кеша используется всеми прокси API, развернутыми в среде. Ключ кеша добавляется в виде orgName __ envName __. Если вы определите запись |
Application |
В качестве префикса используется название прокси-сервера API. Ключ кеша добавляется в виде orgName__envName__apiProxyName. |
Proxy |
В качестве префикса используется конфигурация ProxyEndpoint. Ключ кеша добавляется в начале в следующем формате: orgName__envName__apiProxyName__deployedRevisionNumber__proxyEndpointName . |
Target |
В качестве префикса используется конфигурация TargetEndpoint. Ключ кеша, добавленный в начале в формате orgName__envName__apiProxyName__deployedRevisionNumber__targetEndpointName . |
Exclusive |
По умолчанию. Это наиболее специфичный вариант, поэтому риск конфликта пространств имен в кеше минимален. Префикс может быть двух видов:
Ключ кеша, добавленный в начале в формате: orgName__envName__apiProxyName__deployedRevisionNumber__proxyNameITargetName Например, полная строка может выглядеть так: apifactory__test__weatherapi__16__default__apiAccessToken |
Элемент <Source>
Указывает переменную, значение которой должно быть записано в кеш.
<Source>source_variable</Source>
|
По умолчанию: |
Н/Д |
|
Присутствие |
Обязательно |
|
Тип: |
Строка |
Примечания
Используйте эти правила для кеширования общего назначения. Во время выполнения правило <PopulateCache> записывает данные из переменной, указанной в элементе <Source>, в кеш, указанный в элементе <CacheResource>. Вы можете использовать элементы <CacheKey>, <Scope> и <Prefix>, чтобы указать ключ, который можно использовать из правила <LookupCache> для получения значения. Используйте элемент <ExpirySettings>, чтобы настроить срок действия кешированного значения.
Кэширование общего назначения с помощью правил PopulateCache, LookupCache и InvalidateCache использует кэш, который вы настраиваете, или общий кэш, включенный по умолчанию. В большинстве случаев вам подойдет общий кеш. Чтобы использовать этот кеш, просто опустите элемент <CacheResource>.
Ограничения кеша. Действуют различные ограничения кеша, например на размер имени и значения, общее количество кешей, количество объектов в кеше и срок действия.
Подробнее о внутреннем хранилище данных… Подробнее о том, как создавать и редактировать кеш среды…
О шифровании кеша
Edge для общедоступного облака. Кеш шифруется только в организациях, в которых включены PCI и HIPAA. Шифрование для таких организаций настраивается во время инициализации организации.
Коды ошибок
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки времени выполнения
Эти ошибки могут возникать при выполнении правил.
| Код ошибки | Статус HTTP | Когда возникает |
|---|---|---|
policies.populatecache.EntryCannotBeCached |
500 | Запись нельзя кешировать. Кэшируемый объект сообщения не является экземпляром класса, который можно сериализовать. |
Ошибки развертывания
Эти ошибки могут возникать при развертывании прокси-сервера, содержащего это правило.
| Название ошибки | Причина | Исправить |
|---|---|---|
InvalidCacheResourceReference |
Эта ошибка возникает, если элемент <CacheResource> в правиле PopulateCache имеет название, которое не существует в среде, где развертывается прокси-сервер API. |
build |
CacheNotFound |
Кэш, указанный в элементе <CacheResource>, не существует. |
build |
Переменные ошибок
Эти переменные задаются, когда правило вызывает ошибку. Подробнее о нарушениях правил…
| Переменные | Место | Пример |
|---|---|---|
fault.name="fault_name" |
fault_name – название ошибки, указанное в таблице Ошибки выполнения выше. Название ошибки – это последняя часть кода ошибки. | fault.name = "EntryCannotBeCached" |
populatecache.policy_name.failed |
policy_name – заданное пользователем название правила, которое вызвало ошибку. | populatecache.POP-CACHE-1.failed = true |
Пример ответа об ошибке
{ "fault": { "faultstring": "[entry] can not be cached. Only serializable entries are cached.", "detail": { "errorcode": "steps.populatecache.EntryCannotBeCached" } } }
Пример правила обработки ошибок
<FaultRule name="Populate Cache Fault">
<Step>
<Name>AM-EntryCannotBeCached</Name>
<Condition>(fault.name Matches "EntryCannotBeCached") </Condition>
</Step>
<Condition>(populatecache.POP-CACHE-1.failed = true) </Condition>
</FaultRule>