汎用キャッシュ

Apigee X のドキュメントが表示されています。
Apigee Edge のドキュメントを参照する。

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

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

このトピックのサンプルコードは、GitHub の Outbound OAuth サンプル プロキシに基づき記述されています。このサンプルでは、キャッシュ ポリシーを使用して OAuth アクセス トークンを保存し、複数の送信呼び出しで再利用します。

次の例では、OAuth アクセス トークンが PopulateCache ポリシーを使用してキャッシュに書き込まれます。書き込まれた OAuth トークンは、LookupCache ポリシーによって後続のリクエストで取得されます。このアクセス トークンの期限が切れると、JavaScript を使用して新しいアクセス トークンが取得され、今度はそれが PopulateCache ポリシーによってキャッシュに保存されます。

キャッシュにデータを入力

キャッシュにデータを書き込むには、PopulateCache ポリシーを使用します。この例では、OAuth アクセス トークンをキャッシュに書き込みます。ポリシーのリファレンス情報については、Populate Cache ポリシーをご覧ください。

<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>