InvalidateCache 政策

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

配置如何从缓存中清除已缓存的值。

此政策适用于通用短期缓存。它与填充缓存政策(用于写入条目)和查询缓存政策(用于读取缓存条目)结合使用。

如需了解如何缓存后端资源的响应,请参阅 Response Cache 政策

元素参考

下面列出了您可以在此政策中配置的元素。

<InvalidateCache async="false" continueOnError="false" enabled="true" name="policy-name">
    <DisplayName>Policy Name</DisplayName>
    <CacheKey>
        <Prefix>prefix_string</Prefix>
        <KeyFragment ref="variable_reference"/>
        <KeyFragment>fragment_string</KeyFragment>
    </CacheKey>
    <!-- Omit this element if you're using the included shared cache. -->
    <CacheResource>cache_to_use</CacheResource>
    <Scope>scope_enumeration</Scope>
    <CacheContext>
        <APIProxyName>application_that_added_the_entry</APIProxyName>
        <ProxyName>proxy_for_which_data_was_cached</ProxyName>
        <TargetName>endpoint_for_which_data_was_cached</TargetName>
    </CacheContext>
    <PurgeChildEntries>true_to_purge_all_child_entries</PurgeChildEntries>
</InvalidateCache>

<InvalidateCache> 属性

下表介绍了所有政策父元素通用的特性:

属性 说明 默认 状态
name

政策的内部名称。name 属性的值可以包含字母、数字、空格、连字符、下划线和英文句点。此值不能超过 255 个字符。

(可选)使用 <DisplayName> 元素在管理界面代理编辑器中给政策添加不同的自然语言名称标签。

不适用 必需
continueOnError

设置为 false 可在政策失败时返回错误。这是大多数政策的预期行为。

设置为 true,即使在政策失败后,仍可以继续执行流。

false 可选
enabled

设置为 true 可强制执行政策。

设为 false关闭政策。即使政策仍附加到某个流,也不会强制执行该政策。

true 可选
async

此特性已弃用。

false 已弃用

<DisplayName> 元素

除了用于 name 属性之外,还可以用于在管理界面代理编辑器中给政策添加不同的自然语言名称标签。

<DisplayName>Policy Display Name</DisplayName>
默认

不适用

如果省略此元素,则会使用政策的 name 属性的值。

状态 可选
类型 字符串

<CacheContext>/<APIProxyName> 元素

指定添加了缓存条目的应用的名称。

<APIProxyName>application_that_added_the_entry</APIProxyName>

属性

特性 说明 默认 状态 类型
ref 包含应用名称的变量。 不适用 可选 字符串

<CacheContext> 元素

指定当未指定 Prefix 元素值时如何构造缓存键,或指定如何清除由其他 API 代理添加的缓存条目。

<CacheContext>
  <APIProxyName ref="variable_name">application_that_added_the_entry</APIProxyName>
  <TargetName ref="variable_name">endpoint_for_which_data_was_cached</TargetName>
  <ProxyName ref="variable_name">proxy_for_which_data_was_cached</ProxyName>
</CacheContext>

用于构造 CacheKey。当 CacheKey 前缀(即自定义前缀)不用于清除其他 API 代理添加的缓存条目时,必须提供 APIProxyName、ProxyName 和 TargetName 的值。

<CacheKey> 元素

配置存储在缓存中的数据块的唯一指针。

<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> 元素

指定存储消息的缓存。

如果此政策(以及相应的 RePopupCache 和 LookupCache 政策)使用了所包含的共享缓存,请完全忽略此元素。

<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> 搭配使用。如需了解详情,请参阅使用缓存键

属性

特性 说明 默认 状态 类型
ref 要从中获取值的变量。如果此元素包含字面量值,则不应使用此属性。 不适用 可选 字符串

<CacheKey>/<Prefix> 元素

指定要用作缓存键前缀的值。

<Prefix>prefix_string</Prefix>

默认:

不适用

状态:

可选

类型:

字符串

如果您想指定自己的值,而不是 <Scope> 枚举值,请使用此值,而不是 <Scope>。如果已定义,<Prefix> 将在写入缓存的条目的缓存键值前面。<Prefix> 元素值会替换 <Scope> 元素值。

您可将 <Prefix> 元素与 <CacheKey><Scope> 搭配使用。如需了解详情,请参阅使用缓存键

<CacheContext>/<ProxyName> 元素

指定为其缓存数据的代理的名称。

<ProxyName>proxy_for_which_data_was_cached</ProxyName>

默认:

不适用

状态:

可选

类型:

字符串

属性

特性 说明 默认 状态 类型
ref 要从中获取值的变量。如果此元素包含字面量值,则不应使用此属性。 不适用 可选 字符串

<PurgeChildEntries> 元素

true,用于清除缓存条目,这些缓存条目共享由为此政策配置的 <KeyFragment> 元素设置的值。不考虑缓存键的其他部分(例如 <Prefix> 元素中)的值。

请注意,必须指定 <KeyFragment> 元素。否则,为 <PurgeChildEntries> 设置 true 可能会导致清除缓存中的所有条目。

使同一键片段值的所有缓存条目都失效是一次清除多个相关条目的实用方法。

<PurgeChildEntries>true_to_purge_child_entries</PurgeChildEntries>

默认:

false

状态:

可选

类型:

布尔值

<Scope> 元素

<CacheKey> 元素中未提供 <Prefix> 元素时,用于构造缓存键前缀的枚举。

<Scope>scope_enumeration</Scope>

默认:

“专有”

状态:

可选

类型:

字符串

<Scope> 设置确定根据 <Scope> 值前置的缓存键。例如,将范围设置为 Exclusive 时,缓存键将采用以下格式:

orgName__envName__applicationName__deployedRevisionNumber__proxy|TargetName__ [ serializedCacheKey ]。

如果 <CacheKey> 中存在 <Prefix> 元素,则它会取代 <Scope> 元素值。有效值包括以下枚举。

您可将 <Scope> 元素与 <CacheKey><Prefix> 搭配使用。如需了解详情,请参阅使用缓存键

可接受的值

范围值 说明
Global

缓存密钥可在环境中部署的所有 API 代理之间共享。缓存键的前置格式为 orgName __ envName __。

如果您使用 <KeyFragment> apiAccessToken 和 <Global> 范围定义 <CacheKey> 条目,每个条目都将存储为 orgName__envName__apiAccessToken,后跟访问令牌的序列化值。对于部署在名为“apifactory”的组织中名为“test”的环境中的 API 代理,访问令牌将存储在以下缓存键下:apifactory__test__apiAccessToken

Application

API 代理名称用作前缀。

缓存键的前置格式为 orgName__envName__applicationName

Proxy

ProxyEndpoint 配置用作前缀。

缓存键的前置格式为 orgName__envName__applicationName__deployedRevisionNumber__proxyEndpointName

Target

TargetEndpoint 配置用作前缀。

缓存键的前置格式为 orgName__envName__applicationName__deployedRevisionNumber__targetEndpointName

Exclusive

默认值。这是最具体的,因此在给定缓存中,可将命名空间冲突降至最低。

前缀采用以下两种格式之一:

  • 如果将政策附加到 ProxyEndpoint 流,则前缀格式为 ApiProxyName_ProxyEndpointName
  • 如果将政策附加在 TargetEndpoint,则前缀格式为 ApiProxyName_TargetName

缓存键的前置格式为 orgName__envName__applicationName__deployedRevisionNumber__proxyNameITargetName

例如,完整的字符串可能如下所示:

apifactory__test__weatherapi__16__default__apiAccessToken

<CacheContext>/<TargetName> 元素

指定为其缓存数据的目标端点的名称。

<TargetName>endpoint_for_which_data_was_cached</TargetName>

默认:

不适用

状态:

可选

类型:

字符串

属性

特性 说明 默认 状态 类型
ref 要从中获取值的变量。如果此元素包含字面量值,则不应使用此属性。 不适用 可选 字符串

使用说明

采用 PopulateCache 政策LookupCache 政策和 InvalidateCache 政策的通用缓存使用您配置的缓存或默认添加的共享缓存。在大多数情况下,底层共享缓存应满足您的需求。如需使用此缓存,只需省略 <CacheResource> 元素即可。

如需详细了解如何配置缓存,请参阅创建和修改环境缓存。如需详细了解底层数据存储区,请参阅缓存内部

错误代码

本部分介绍当此政策触发错误时所设置的错误消息和流变量。在为代理开发故障规则时,请务必了解此信息。如需了解详情,请参阅您需要了解的有关政策错误的信息处理故障

错误代码前缀

不适用

运行时错误

此政策不会抛出任何运行时错误。

部署错误

在您部署包含此政策的代理时,可能会发生这些错误。

错误名称 原因 修复
InvalidCacheResourceReference 如果将 InvalidateCache 政策中的 <CacheResource> 元素设置为部署 API 代理的环境中不存在的名称,则会出现此错误。
CacheNotFound 如果尚未在特定的消息处理器组件上创建错误消息中提及的特定缓存,就会发生此错误。

故障变量

错误响应示例

不适用