Пример: кэширование общего назначения

Вы просматриваете документацию по Apigee Edge.
См. документацию по Apigee X.

Вы можете использовать политики для хранения данных в кэше общего назначения для более быстрого поиска. Используя следующие политики, ваш прокси-сервер может хранить и извлекать кэшированные данные во время выполнения:

Эти политики предназначены для общего кэширования данных, используемых вашими прокси.

Пример кода в этом разделе основан на образце исходящего прокси-сервера OAuth на Github (см. список примеров ). В этом примере политика кэширования используется для хранения маркера доступа OAuth для повторного использования в нескольких исходящих вызовах.

Каждый тип политики определяется схемой XML (.xsd). Для справки: схемы политик доступны на GitHub.

В следующем примере маркер доступа OAuth записывается в кэш с помощью политики PopulateCache. Токен OAuth извлекается для последующих запросов политикой LookupCache. По истечении срока действия токена доступа JavaScript используется для получения нового токена доступа, который, в свою очередь, кэшируется политикой PopulateCache.

Заполнить кеш

Используйте политику PopulateCache для записи данных в кэш. В этом примере маркер доступа OAuth записывается в кеш. Справочную информацию о политике см. в разделе Политика заполнения кэша .

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