2014-01-30 2 views
0

Я пытаюсь выяснить, когда ответ был сохранен в моем ResponseCache. Я вижу следующие переменные ResponseCache:Определение времени кэширования ответа в Apigee ResponseCache

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

Я не вижу переменную на время, в течение которого был кэширован ответ. Есть ли такая переменная?

ответ

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 * будут пропущены, и на целевой сервер не будет вызова.

В отличие от политики кэша, вы не можете определить, что происходит в кеше для ResponseCache. Это весь ответ. Однако вы можете добавить свои собственные данные, добавив их в ответ.

В вашем случае, прямо перед ответом RC1-политика вызывается в потоке ответа, добавляет заголовок к ответу с текущим временем (system.time). Ответ будет кэширован с вашим настраиваемым заголовком. Затем, после политики ответа RC1, извлеките и разделите заголовок времени от ответа. Используя текущее время system.time, вы также можете рассчитать, как долго ответ был в кеше.

0

Мне нравится ответ, предоставленный Майком. Но, пытаясь понять больше о вашем случае использования - похоже, в зависимости от возраста записи в кэш, вы не можете вернуть его из кеша. Если это так, вы всегда можете указать параметр истечения, так что старые записи кэша автоматически аннулируются Apigee Edge. Никакого условного программирования не требуется.

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

См: http://apigee.com/docs/api-services/content/optimize-performance-using-cache

+0

Я использую уже - мне просто нужно вернуться, как старый элемент кэша в ответ. – user3254312

Смежные вопросы