Вы просматриваете документацию 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 | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
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>
. Например, ключ кэша будет иметь следующую форму, если для области действия установлено 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>