汎用キャッシュ

このページの内容は ApigeeApigee ハイブリッドに該当します。

Apigee Edge のドキュメントを表示する

ポリシーを使用してデータを汎用キャッシュに格納すると、データをより高速に取得できるようになります。プロキシでは次のポリシーを使用して、実行時にデータをキャッシュに保存したり、キャッシュに保存されたデータを取得したりできます。

上記のポリシーは、プロキシで使用するデータの汎用キャッシュ用に設計されています。

このトピックのサンプルコードは、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>