我正在试图找出响应何时存储在我的ResponseCache中。我看到以下ResponseCache变量:
responsecache.<policy-name>.cachename
responsecache.<policy-name>.cachekey
responsecache.<policy-name>.cachehit
responsecache.<policy-name>.invalidentry在缓存响应时,我没有看到一个变量。有这样的变数吗?
发布于 2014-01-30 17:49:59
在响应流中遇到策略时,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,还可以计算响应在缓存中的时间。
发布于 2014-01-31 02:53:39
我喜欢迈克提供的答案。但是,试图了解更多关于用例的信息--听起来像是根据缓存条目的年龄而定--您可能不会从缓存中返回它。如果是这种情况,则始终可以指定过期设置,以便Apigee自动使旧的缓存条目失效。您不需要有条件的编程。
<ExpirySettings>
<TimeoutInSec>300</TimeoutInSec>
</ExpirySettings>参考:http://apigee.com/docs/api-services/content/optimize-performance-using-cache
https://stackoverflow.com/questions/21463667
复制相似问题