我试图弄清楚响应何时存储在我的 ResponseCache 中。我看到以下 ResponseCache 变量:
responsecache.<policy-name>.cachename
responsecache.<policy-name>.cachekey
responsecache.<policy-name>.cachehit
responsecache.<policy-name>.invalidentry
我没有看到缓存响应时间的变量。有这样的变量吗?
Apigee ResponseCache 政策会在响应流中遇到该政策时自动缓存整个响应。我不相信有任何可访问的变量包含响应放入缓存的时间。但是,有一种方法可以做到这一点。
首先,我将总结 ResponseCache 流程。假设我们有一个 ResponseCache 策略 RC1。您将它放在请求和响应流中。这是一个图表:
-->[P]-->[P]-->[P]-->[RC1]-->[P*]-->[P*]-->[P*]-->
CLIENT v TARGET
<--[P]<--[P]<--[P]<--[RC1]<--[P*]<--[P*]<--[P*]<--
当流到达请求流中的 RC1 时,缓存键已经建立,并检查响应缓存中是否有相应的缓存响应。
在缓存未命中的情况下,将运行所有策略(P、P* 和 RC1)。当响应流中到达 RC1 时,整个响应将存储在缓存中并继续流。
当缓存命中时,只会运行 P 和 RC1 策略。将跳过 P* 策略,并且不会调用目标服务器。
与缓存策略不同,您无需为 ResponseCache 定义缓存中的内容。这是整个回应。但是,您可以通过将数据添加到响应中来添加自己的数据。
在您的情况下,在响应流中调用响应 RC1 策略之前,使用当前时间 (system.time) 向响应添加标头。响应将与您的自定义标头一起缓存。然后,在响应 RC1 策略之后,从响应中提取并剥离时间标头。使用当前的 system.time,您还可以计算响应在缓存中的停留时间。
我喜欢迈克提供的答案。但是尝试更多地了解您的用例 - 听起来取决于缓存条目的年龄,您可能不会从缓存中返回它。如果是这种情况,您始终可以指定过期设置,以便 Apigee Edge 自动使较旧的缓存条目失效。您不需要条件编程。
<ExpirySettings>
<TimeoutInSec>300</TimeoutInSec>
</ExpirySettings>
参考:http ://apigee.com/docs/api-services/content/optimize-performance-using-cache