Вы просматриваете документацию 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 | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
элемент <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> Этот элемент заменяет устаревший элемент |
<ExpiryDate> | Указывает дату, когда запись в кэше должна истечь. Укажите строку в формате <ExpirySettings> <ExpiryDate ref="var-containing-date">expiry</ExpiryDate> </ExpirySettings> Если указанная дата относится к прошлому, политика применит к кэшированной записи максимально допустимый срок действия. Этот максимум составляет 30 дней. |
<TimeOfDay> | Указывает время суток, когда срок действия записи в кэше должен истечь. Укажите строку в формате <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 __. Если вы определяете запись |
Application | В качестве префикса используется имя API-прокси. Ключ кэша добавляется в префикс в формате orgName__envName__apiProxyName . |
Proxy | В качестве префикса используется конфигурация ProxyEndpoint. Ключ кэша добавляется в префикс в формате orgName__envName__apiProxyName__deployedRevisionNumber__proxyEndpointName . |
Target | В качестве префикса используется конфигурация TargetEndpoint. Ключ кэша добавляется в начало файла в формате orgName__envName__apiProxyName__deployedRevisionNumber__targetEndpointName . |
Exclusive | По умолчанию. Это наиболее специфический вариант, поэтому он представляет минимальный риск конфликтов имен в рамках данного кэша. Префикс может иметь одну из двух форм:
Ключ кэша добавляется в начало файла в формате 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. | build |
CacheNotFound | Кэш, указанный в элементе <CacheResource> , не существует. | build |
Переменные неисправности
Эти переменные устанавливаются, когда эта политика вызывает ошибку. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .
| Переменные | Где | Пример |
|---|---|---|
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>