<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
使用缓存政策时,您可以通过配置缓存键来确保缓存值键的唯一性。缓存键以及您可以配置的其他值提供了一种可靠的方式,让您能够取出与所放入的数据相同的数据。您可以将缓存键与填充缓存政策、LookupCache 政策、InvalidateCache 政策和响应缓存政策结合使用。
配置元素的值(<CacheKey>
/<KeyFragment>
、<Scope>
和 <Prefix>
)串联在一起,以创建与您放入缓存的值相关联的标识符。您可以使用同一配置检索该值。
使用以下缓存政策配置元素,您可以创建缓存键:
缓存配置元素 | 说明 |
---|---|
<CacheKey> / <KeyFragment> |
结合使用 <CacheKey> <KeyFragment> 元素,为缓存条目指定唯一标识符。KeyFragment 值可以是静态字面量,也可以根据变量进行设置。 |
<Scope> 或 <Prefix> |
使用 <Scope> 或 <Prefix> 元素以进一步改进命名空间缓存键。<Scope> 枚举预定义值列表。<Prefix> 元素将使用您选择的值替换 <Scope> 。 |
这些值会采用以下格式串联,其中 <Scope>
或 <Prefix>
值与 KeyFragment 值之间用双下划线分隔。多个 KeyFragment 值也用双下划线分隔。
scope | prefix__keyfragment[__keyfragment]
使用响应缓存政策,您可以选择向此缓存键附加响应 Accept 标头中的值。
使用 <CacheKey>
<CacheKey>
元素会配置 Edge 如何为其创建的每个缓存条目创建唯一标识符(键)。当 Edge 检索缓存的值时,它使用缓存键查找正确的值。在 ResponseCache 政策中,一个配置可以同时为缓存和检索定义键。在 RePopulateCache 和 LookupCache 政策中,每个政策必须具有相同的 <CacheKey>
元素,以确保从缓存中检索到的值与放在那里的值相对应。
<CacheKey>
元素可以包含多个 <KeyFragment>
元素。在运行时,<KeyFragment>
元素指定的值通过它们时间的两个下划线串联在一起,以构成缓存键的一部分。
例如,以下配置会创建一个值 hello__world
,以供在缓存键中使用:
<CacheKey> <KeyFragment>hello</KeyFragment> <KeyFragment>world</KeyFragment> <CacheKey>
您还可以在缓存键中使用变量值,方法是在 <KeyFragment>
元素中引用该变量,如下所示:
<KeyFragment ref="variable_name"/>
例如,要使缓存键值包含请求消息的 Content-Type,您可以按如下方式执行此操作:
<KeyFragment ref="request.header.Content-Type"/>
在以下配置中,request.header.Content-Type
变量的值为 application/json
。
<CacheKey> <KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.header.Content-Type" /> <KeyFragment>bar</KeyFragment> </CacheKey>
这会生成以 apiAccessToken__application/json__bar
结尾的缓存键。
如需查看您可以使用的变量列表,请参阅变量参考文档。
源自查询参数的缓存键
使用 request.queryparam.<queryparam_name> 和 request.querystring 等变量,您可以配置缓存键,使该键包含请求的查询字符串的一部分。例如,以下网址使用了两个查询参数,即 param1 和 param2,您可以在缓存键中使用它们:
http://myaccount.apigee.net/mydata?param1=value1¶m2=value2
<CacheKey>
元素可以将这些值与如下配置合并:
<CacheKey> <KeyFragment ref="request.queryparam.param1" /> <KeyFragment ref="request.queryparam.param2" /> <CacheKey>
在运行时,缓存键将包含串联的参数值,如下所示:
other_key_parts__value1__value2
请注意,当您使用变量从参数中插入值时,这些值将按照 <KeyFragment>
元素顺序提示的顺序串联起来。另请注意,Edge 只会使用您使用 <KeyFragment>
元素明确引用的值。如果请求查询参数列表发生变化,那么在缓存键中不会考虑这些变化。
另一种方式是使用 request.querystring 变量,该变量在缓存键中直接插入整个参数字符串。请注意,尽管此方法会考虑所有参数,但如果参数的顺序在一个请求与下一个请求之间有所不同,那么键也会不同。换句话说,param1=value1¶m2=value2
和 param2=value2¶m1=value1
不会生成相同的缓存键值。
如需查看您可以使用的变量列表,请参阅变量参考文档。
使用 <Scope> 和 <Prefix>
<Scope>
和 <Prefix>
元素提供了一种使用命名空间前缀扩增键的方法。它们所表示的值将附加到缓存键中。
默认情况下,使用 <Scope>
元素。这是一个枚举,其值的范围从宽到窄,最窄的值是默认值。除非您指定其他值或指定 <Prefix>
元素值,否则系统将使用此默认值。您可以使用 <Prefix>
元素替换 <Scope>
值,以便为命名空间指定自定义值。
例如,<Scope>
值“Global”(全局)是最宽的范围,表示组织和环境名称。因此,如果您的代理部署在名为“mycompany”的组织和名为“prod”的环境中,则生成的前置值将如下所示:
配置 | 结果 |
---|---|
<Scope>Global</Scope> |
mycompany__prod__ 。 |
如果您将全局范围与上面定义的缓存键一起使用,则结果如下所示:
配置 | 结果 |
---|---|
<Scope>Global</Scope> <CacheKey> <KeyFragment>hello</KeyFragment> <KeyFragment>world</KeyFragment> <CacheKey> |
mycompany__prod__hello__world 。 |
如 LookupCache 政策中所述,您可以配置范围以增加从全局到独占的专用性。独占范围是最具体的范围,因此表示给定缓存中命名空间冲突的风险最低。每个具有独占范围的缓存条目的前缀都采用以下格式:
orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__[serializedCacheKey]
例如,使用 <Scope>
的独占值创建的缓存键如下所示:
apifactory__test__weatherapi__16__default__apiAccessToken