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

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Za pomocą zasad możesz przechowywać dane w pamięci podręcznej ogólnego przeznaczenia, aby przyspieszyć ich pobieranie. Dzięki tym zasadom Twój serwer proxy może przechowywać i pobierać dane z pamięci podręcznej w czasie działania:

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

Przykładowy kod w tym artykule jest oparty na przykładowym serwerze proxy Outbound OAuth w GitHubie (zobacz listę przykładów). Ten przykład używa zasady pamięci podręcznej do przechowywania tokena dostępu OAuth w celu ponownego użycia w wielu wywołaniach wychodzących.

Każdy typ zasady jest zdefiniowany przez schemat XML (.xsd). Dla odniesienia, schematy zasad są dostępne na GitHubie.

W tym przykładzie token dostępu OAuth jest zapisywany w pamięci podręcznej za pomocą zasady PopulateCache. Token OAuth jest pobierany w przypadku kolejnych żądań przez zasadę LookupCache. Gdy token dostępu wygaśnie, JavaScript służy do pobierania nowego tokena dostępu, który jest z kolei buforowany przez zasadę PopulateCache.

Wypełnianie pamięci podręcznej

Do zapisywania danych w pamięci podręcznej używaj zasady PopulateCache. Ten przykład zapisuje w pamięci podręcznej token dostępu OAuth. Informacje o zasadach znajdziesz w zasadach dotyczących 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. W tym przykładzie zmienna Source 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 artykule Praca z kluczami pamięci podręcznej.

Wyszukiwanie danych w pamięci podręcznej

Wartości z pamięci podręcznej możesz pobierać za pomocą zasady LookupCache. Ta zasada LookupCache odczytuje wartość z mycache i zapisuje ją w zmiennej twitter-translate.apiAccessToken. Informacje o zasadach znajdziesz w zasadach dotyczących pamięci podręcznej.

<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 pamięci podręcznej

Pamięć podręczną można unieważnić, określając nagłówek HTTP. Gdy otrzymane zostanie żądanie zawierające określony nagłówek HTTP, pamięć podręczna zostanie opróżniona. Informacje o zasadach znajdziesz w zasadach dotyczących pamięci podręcznej .

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