Azure APIM如何基于相同查询参数配置2分钟响应缓存
Azure APIM 按查询参数匹配缓存GET接口响应配置方法
只配置outbound节点的cache-store仅能实现响应写入缓存的逻辑,缓存命中校验、按参数生成唯一缓存键的逻辑需要在inbound节点通过cache-lookup策略实现,具体配置要点如下:
- 缓存总时长2分钟对应配置值为120秒,
cache-lookup和cache-store的duration参数要保持一致 - 在
cache-lookup节点内通过vary-by-query-parameter明确指定参与缓存匹配的查询参数,这里填接口的productCode和PurchasedDate两个字段,避免无关查询参数(比如traceId这类随机传参)干扰缓存命中 - 由于
PurchasedDate是DateTime类型,客户端传参可能存在格式差异(比如时区标识不一致、日期分隔符不同),需要在缓存查找前统一该参数的格式,避免逻辑上的同个请求因为格式问题无法命中缓存
完整可直接使用的策略配置如下:
<policies> <inbound> <base /> <!-- 统一日期参数格式,消除格式差异导致的缓存匹配失败问题 --> <set-query-parameter name="PurchasedDate" exists-action="override"> <value>@(DateTime.Parse(context.Request.Url.Query.GetValueOrDefault("PurchasedDate")).ToString("yyyy-MM-ddTHH:mm:ss"))</value> </set-query-parameter> <!-- 缓存查找规则:仅按指定两个查询参数生成缓存键 --> <cache-lookup vary-by-developer="false" vary-by-developer-groups="false" allow-private-response-caching="false" duration="120"> <vary-by-query-parameter>productCode</vary-by-query-parameter> <vary-by-query-parameter>PurchasedDate</vary-by-query-parameter> </cache-lookup> </inbound> <backend> <base /> </backend> <outbound> <base /> <!-- 响应写入缓存,有效期120秒即2分钟 --> <cache-store duration="120" /> </outbound> <on-error> <base /> </on-error> </policies>
补充说明:如果后续需要让所有传入的查询参数都参与缓存匹配,不需要逐个列参数名,直接把
vary-by-query-parameter的取值设为*即可。当前场景显式指定两个参数是最稳妥的方案,不会被随机传入的无关参数影响缓存命中率。
内容的提问来源于stack exchange,提问作者itaustralia
相关产品推荐
相关产品推荐

