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

Wyświetlasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Możesz użyć zasad, aby przechowywać dane w pamięci podręcznej ogólnego przeznaczenia w celu szybszego pobierania. Za pomocą tych zasad serwer proxy może przechowywać i pobierać dane z pamięci podręcznej w czasie działania:

Te zasady zostały opracowane z myślą o ogólnych buforowaniu danych używanych przez serwery proxy.

Przykładowy kod w tym temacie jest oparty na przykładowym serwerze proxy OAuth na GitHubie (zobacz Lista przykładów). W tym przykładzie użyto parametru zasad pamięci podręcznej do przechowywania tokena dostępu OAuth do wielokrotnego użytku w wielu połączeniach wychodzących.

Każdy typ zasad jest definiowany przez schemat XML (.xsd). Dla porównania: schematy zasad są dostępne na GitHubie.

W poniższym przykładzie token dostępu OAuth jest zapisywany w pamięci podręcznej przy użyciu interfejsu PopulationCache . Token OAuth jest pobierany dla kolejnych żądań przez zasadę lookupCache. Po wygaśnięciu tokena dostępu JavaScript jest używany do pobierania nowego tokena dostępu, który jest następnie przechowywany w pamięci podręcznej przez zasadę PopulateCache.

Wypełnij pamięć podręczną

Użyj zasady PopulationCache do zapisywania danych w pamięci podręcznej. Ten przykład zapisuje dostęp OAuth token w pamięci podręcznej. Informacje o zasadach znajdziesz tutaj: Wypełnij zasadę 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 JavaScriptu:context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Więcej informacji o kluczach pamięci podręcznej znajdziesz w sekcji 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 Wyszukaj pamięć podręczną odczytuje wartość z zakresu mycache i zapisuje ją w funkcji zmienna twitter-translate.apiAccessToken. Informacje o zasadach znajdziesz w zasadach dotyczących pamięci podręcznej 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żnianie zawartości pamięci podręcznej

Pamięć podręczna można jawnie unieważnić, określając nagłówek HTTP. Jeśli takie żądanie zawiera określony nagłówek HTTP, pamięć podręczna zostanie opróżniona. Zasady informacje referencyjne znajdziesz w artykule o zasadach nieprawidłowych pamięci podręcznej (w języku angielskim).

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