Правило PopulateCache

Вы просматриваете документацию по 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

Внутреннее имя политики. Значение атрибута 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> создает название для каждого фрагмента данных, хранящихся в кеше.

Во время выполнения к значениям <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>

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

<ExpiryDate>

Указывает дату, когда запись в кеше должна устареть. Укажите строку в формате mm-dd-yyyy.

<ExpirySettings>
  <ExpiryDate ref="var-containing-date">expiry</ExpiryDate>
</ExpirySettings>

Если указанная дата уже прошла, правило применит к записи в кеше максимальное время жизни. Максимальный срок – 30 дней.

<TimeOfDay>

Указывает время суток, когда запись в кеше должна устареть. Укажите строку в формате HH:mm:ss, где HH – час в 24-часовом формате в часовом поясе UTC. Например, 14:30:00 означает 14:30.

<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 __.

Если вы определите запись <CacheKey> с параметрами <KeyFragment> apiAccessToken и <Global> scope, каждая запись будет сохранена как orgName__envName__apiAccessToken, за которым следует сериализованное значение токена доступа. Для прокси-сервера API, развернутого в среде под названием test в организации apifactory, токены доступа будут храниться под следующим ключом кеша: apifactory__test__apiAccessToken.

Application

В качестве префикса используется название прокси-сервера API.

Ключ кеша добавляется в виде orgName__envName__apiProxyName.

Proxy

В качестве префикса используется конфигурация ProxyEndpoint.

Ключ кеша добавляется в начале в следующем формате: orgName__envName__apiProxyName__deployedRevisionNumber__proxyEndpointName .

Target

В качестве префикса используется конфигурация TargetEndpoint.

Ключ кеша, добавленный в начале в формате orgName__envName__apiProxyName__deployedRevisionNumber__targetEndpointName .

Exclusive

По умолчанию. Это наиболее специфичный вариант, поэтому риск конфликта пространств имен в кеше минимален.

Префикс может быть двух видов:

  • Если правило прикреплено к потоку ProxyEndpoint, префикс имеет вид ApiProxyName_ProxyEndpointName.
  • Если правило прикреплено к TargetEndpoint, префикс имеет вид ApiProxyName_TargetName.

Ключ кеша, добавленный в начале в формате: 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.
CacheNotFound Кэш, указанный в элементе <CacheResource>, не существует.

Переменные ошибок

Эти переменные задаются, когда правило вызывает ошибку. Подробнее о нарушениях правил…

Переменные Место Пример
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>