Политика PopulateCache

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

Настраивает способ записи кэшированных значений во время выполнения.

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

Для кэширования ответов серверных ресурсов смотрите политику Response 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> . Дополнительную информацию см. в разделе Работа с ключами кэша .

Атрибуты

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

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

Элемент <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 , где ЧЧ представляет час в 24-часовом формате часов в часовом поясе UTC. Например, 14:30:00 означает 14:30 дня.

<ExpirySettings>
  <TimeOfDay ref="var-containing-time">expiry</TimeOfDay>
</ExpirySettings>

Вам следует указать только один из возможных дочерних элементов. Если вы указываете несколько элементов, порядок приоритета следующий: TimeoutInSeconds , ExpiryDate , TimeOfDay .

Для каждого из вышеперечисленных дочерних элементов <ExpirySettings> , если вы укажете необязательный атрибут ref для дочернего элемента, политика получит значение срока действия из именованной переменной контекста. Если переменная не определена, политика использует буквальное текстовое значение дочернего элемента.

Элемент <Область>

Перечисление, используемое для создания префикса для ключа кэша, когда элемент <Prefix> не указан в элементе <CacheKey> .

<Scope>scope_enumeration</Scope>

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

«Эксклюзивный»

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

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

Тип:

Нить

Параметр <Scope> определяет ключ кэша, который добавляется в начало в соответствии со значением <Scope> . Например, ключ кэша будет иметь следующую форму, если для области действия установлено Exclusive :

orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__ [ serializedCacheKey ]

Если элемент <Prefix> присутствует в <CacheKey> , он заменяет значение элемента <Scope> . Допустимые значения включают перечисления ниже.

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

Допустимые значения

Global

Ключ кэша используется всеми прокси-серверами API, развернутыми в среде. Ключ кэша добавляется в форме orgName __ envName __.

Если вы определяете запись <CacheKey> с помощью <KeyFragment> apiAccessToken и области <Global> , каждая запись сохраняется как 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_variable</Source>

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

Н/Д

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

Необходимый

Тип:

Нить

Примечания по использованию

Используйте эту политику для кэширования общего назначения. Во время выполнения политика <PopulateCache> записывает данные из переменной, указанной вами в элементе <Source> , в кэш, указанный в элементе <CacheResource> . Вы можете использовать элементы <CacheKey> , <Scope> и <Prefix> , чтобы указать ключ, который можно использовать из политики <LookupCache> для получения значения. Используйте элемент <ExpirySettings> , чтобы настроить срок действия кэшированного значения.

Кэширование общего назначения с помощью политики PopulateCache, политики LookupCache и политики InvalidateCache использует либо настроенный вами кеш, либо общий кеш, включенный по умолчанию. В большинстве случаев базовый общий кэш должен соответствовать вашим потребностям. Чтобы использовать этот кеш, просто опустите элемент <CacheResource> .

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

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

О шифровании кэша

Edge для общедоступного облака: кэш шифруется только в организациях с поддержкой PCI и HIPAA . Шифрование для этих организаций настраивается во время подготовки организации.

Коды ошибок

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP Status Occurs when
policies.populatecache.EntryCannotBeCached 500 An entry cannot be cached. The message object being cached is not an instance of a class that is Serializable.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidCacheResourceReference This error occurs if the <CacheResource> element in the PopulateCache policy is set to a name that does not exist in the environment where the API proxy is being deployed.
CacheNotFound The cache specified in the <CacheResource> element does not exist.

Fault variables

These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name = "EntryCannotBeCached"
populatecache.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. populatecache.POP-CACHE-1.failed = true

Example error response

{
  "fault": {
    "faultstring": "[entry] can not be cached. Only serializable entries are cached.",
    "detail": {
      "errorcode": "steps.populatecache.EntryCannotBeCached"
    }
  }
}

Example fault rule

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