Политика 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>

The following table describes attributes that are common to all policy parent elements:

Attribute Description Default Presence
name

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Optional
async

This attribute is deprecated.

false Deprecated

<DisplayName> element

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, natural-language name.

<DisplayName>Policy Display Name</DisplayName>
Default

N/A

If you omit this element, the value of the policy's name attribute is used.

Presence Optional
Type String

Элемент <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 . Шифрование для этих организаций настраивается во время подготовки организации.

Коды ошибок

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