Политика PopulateCache

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

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

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

Для кэширования ответов от серверных ресурсов см. политику кэширования ответов .

Ссылка на элемент

Ниже перечислены элементы, которые можно настроить в рамках этой политики.

<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 , где HH обозначает час в 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> . Например, ключ кэша будет иметь следующий вид, если для параметра 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>