このページの内容は Apigee と Apigee ハイブリッドに該当します。
Apigee Edge のドキュメントを表示する
ポリシーを使用してデータを汎用キャッシュに格納すると、データをより高速に取得できるようになります。プロキシでは次のポリシーを使用して、実行時にデータをキャッシュに保存したり、キャッシュに保存されたデータを取得したりできます。
- PopulateCache ポリシー: キャッシュにデータを追加します。
- LookupCache ポリシー: キャッシュに保存されているデータにアクセスします。
- InvalidateCache ポリシー: キャッシュをフラッシュします。
上記のポリシーは、プロキシで使用するデータの汎用キャッシュ用に設計されています。
このトピックのサンプルコードは、GitHub の Outbound OAuth サンプル プロキシに基づき記述されています。このサンプルでは、キャッシュ ポリシーを使用して OAuth アクセス トークンを保存し、複数の送信呼び出しで再利用します。
次の例では、PopulateCache ポリシーによって OAuth アクセス トークンをキャッシュに書き込みます。また、LookupCache ポリシーによって、書き込まれた OAuth トークンを後続のリクエスト用に取得します。このアクセス トークンの期限が切れた場合は、JavaScript によって新しいアクセス トークンを取得し、PopulateCache ポリシーによってキャッシュに保存します。
キャッシュへのデータ入力
キャッシュにデータを書き込むには、PopulateCache ポリシーを使用します。この例では、OAuth アクセス トークンをキャッシュに書き込みます。ポリシーのリファレンス情報については、PopulateCache ポリシーをご覧ください。
<PopulateCache name="token-cache"> <!-- The cache to write to. --> <CacheResource>mycache</CacheResource> <!-- The source of the data, a variable containing the value. --> <Source>twitter-translate.apiAccessToken</Source> <!-- An enumeration representing a prefix for namespace scope. --> <Scope>Exclusive</Scope> <!-- A unique pointer (a flow variable value) to the data. Use this later to retrieve it. --> <CacheKey> <KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.queryparam.client_id"></KeyFragment> </CacheKey> <!-- Entries placed into the cache with this policy will expire after 600 seconds. --> <ExpirySettings> <TimeoutInSec>600</TimeoutInSec> </ExpirySettings> </PopulateCache>
変数は、ポリシーまたはコードによって設定できます。この例の Source
変数は、JavaScript 呼び出し context.setVariable('twitter-translate.apiAccessToken', getAccessToken());
によって入力されます。
キャッシュキーの詳細については、キャッシュキーの使用をご覧ください。
キャッシュに保存されたデータのルックアップ
キャッシュに保存された値は LookupCache ポリシーを使用して取得できます。次の LookupCache ポリシーは、mycache
から値を読み取り、変数 twitter-translate.apiAccessToken
に書き込みます。ポリシーのリファレンス情報については、LookupCache ポリシーをご覧ください。
<LookupCache name="token-cache"> <!-- The cache to read from. --> <CacheResource>mycache</CacheResource> <!-- Where to assign the retrieved value - here, a variable. --> <AssignTo>twitter-translate.apiAccessToken</AssignTo> <!-- An enumeration representing a prefix for namespace scope. --> <Scope>Exclusive</Scope> <!-- The unique pointer (a flow variable value) that was used to store the data in the cache. --> <CacheKey> <KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.queryparam.client_id"></KeyFragment> </CacheKey> </LookupCache>
キャッシュの無効化
キャッシュを明示的に無効にするには、HTTP ヘッダーを指定します。指定された HTTP ヘッダーを含むリクエストが受信されると、キャッシュがフラッシュされます。ポリシーのリファレンス情報については、InvalidateCache ポリシーをご覧ください。
<InvalidateCache name="InvalidateMyCache"> <!-- The cache to invalidate. --> <CacheResource>test-cache</CacheResource> <!-- An enumeration representing a prefix for namespace scope. --> <Scope>Exclusive</Scope> <!-- Fragments constructing the unique pointer used when the data was put into the cache. --> <CacheKey> <KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.queryparam.client_id" /> </CacheKey> <PurgeChildEntries>true</PurgeChildEntries> </InvalidateCache>