Przykład: buforowanie do celów ogólnych

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Za pomocą zasad możesz przechowywać dane w pamięci podręcznej ogólnego przeznaczenia, aby przyspieszyć ich pobieranie. Korzystając z tych zasad, serwer proxy może zapisywać i pobierać dane z pamięci podręcznej w czasie działania:

Te zasady służą do ogólnego buforowania danych używanych przez serwery proxy.

Przykładowy kod w tym temacie jest oparty na przykładowym serwerze proxy ruchu wychodzącego przy użyciu GitHuba (zobacz lista przykładów). W tym przykładzie zastosowano zasadę pamięci podręcznej do przechowywania tokena dostępu OAuth do ponownego użycia w wielu wywołaniach wychodzących.

Każdy typ zasady jest definiowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.

W poniższym przykładzie token dostępu OAuth jest zapisywany w pamięci podręcznej za pomocą zasady PuulationCache. Token OAuth jest pobierany na potrzeby kolejnych żądań przez zasadę LookupCache. Po wygaśnięciu tokena dostępu nowy token dostępu jest pobierany przy użyciu JavaScriptu, który jest z kolei zapisywany w pamięci podręcznej przez zasadę PopulateCache.

Wypełnij pamięć podręczną

Zasada PopulateCache służy do zapisywania danych w pamięci podręcznej. W tym przykładzie zapisujemy token dostępu OAuth w pamięci podręcznej. Informacje o zasadach znajdziesz w artykule o wypełnianiu zasady pamięci podręcznej.

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

Zmienne mogą być wypełniane przez zasady lub kod. Zmienna Source w tym przykładzie jest wypełniana przez to wywołanie JavaScript: context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Więcej informacji o kluczach pamięci podręcznej znajdziesz w artykule Praca z kluczami pamięci podręcznej.

Wyszukaj dane w pamięci podręcznej

Wartości z pamięci podręcznej można pobierać za pomocą zasady LookupCache. Poniższa zasada LookupCache odczytuje wartość z tabeli mycache i zapisuje ją w zmiennej twitter-translate.apiAccessToken. Informacje o zasadach znajdziesz w opisie zasady 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>

Unieważnij pamięć podręczną

Pamięć podręczną można jawnie unieważnić, podając nagłówek HTTP. Po otrzymaniu żądania zawierającego określony nagłówek HTTP pamięć podręczna zostanie opróżniona. Informacje o zasadach znajdziesz w artykule o zasadach 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>