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

Коды ошибок

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