0

応答が ResponseCache にいつ保存されたかを把握しようとしています。次の ResponseCache 変数が表示されます。

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

応答がキャッシュされた時間の変数が表示されません。そのような変数はありますか?

4

2 に答える 2

1

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* ポリシーはスキップされ、ターゲット サーバーへの呼び出しはありません。

Cache ポリシーとは異なり、ResponseCache のキャッシュに何を入れるかを定義することはできません。全体の回答です。ただし、独自のデータを応答に追加することで追加できます。

あなたの場合、応答 RC1 ポリシーが応答フローで呼び出される直前に、現在の時刻 (system.time) を含む応答にヘッダーを追加します。応答は、カスタム ヘッダーと共にキャッシュされます。次に、応答 RC1 ポリシーの後、時間ヘッダーを抽出して応答から取り除きます。現在の system.time を使用して、応答がキャッシュに保持されている時間を計算することもできます。

于 2014-01-30T17:49:59.513 に答える
0

マイクが提供した答えが気に入っています。しかし、ユースケースについてもっと理解しようとすると、キャッシュエントリの経過時間によっては、キャッシュから返されない場合があるように思えます。この場合、古いキャッシュ エントリが Apigee Edge によって自動的に無効になるように、有効期限設定をいつでも指定できます。条件付きプログラミングは必要ありません。

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

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

于 2014-01-31T02:53:39.793 に答える