确定在Apigee ResponseCache中缓存响应的时间

时间:2014-01-30 17:41:23

标签: caching apigee

我正在试图找出响应存储在ResponseCache中的时间。我看到以下ResponseCache变量:

responsecache.<policy-name>.cachename
responsecache.<policy-name>.cachekey
responsecache.<policy-name>.cachehit
responsecache.<policy-name>.invalidentry

我没有看到响应缓存时的变量。有这样的变量吗?

2 个答案:

答案 0 :(得分:1)

Apigee ResponseCache policy会在响应流中遇到策略时自动缓存整个响应。我不相信有任何可访问的变量包含响应放入缓存的时间。但是,有一种方法可以实现这一目标。

首先,我将总结一下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 *策略,并且不会调用目标服务器。

与Cache策略不同,您无法定义ResponseCache缓存中的内容。这是整个回应。但是,您可以通过将其添加到响应中来添加自己的数据。

在您的情况下,在响应流中调用响应RC1策略之前,使用当前时间(system.time)向响应添加标头。响应将使用您的自定义标头缓存。然后,在响应RC1策略之后,从响应中提取并删除时间头。使用当前的system.time,您还可以计算响应在缓存中的时长。

答案 1 :(得分:0)

我喜欢Mike提供的答案。但是试图更多地了解您的用例 - 听起来像取决于缓存条目的年龄,您可能无法从缓存中返回它。如果是这种情况,您始终可以指定到期设置,以便Apigee Edge自动使旧的缓存条目无效。您不需要任何条件编程。

  <ExpirySettings>
    <TimeoutInSec>300</TimeoutInSec>
  </ExpirySettings>

参考:http://apigee.com/docs/api-services/content/optimize-performance-using-cache