Memorizzazione nella cache per uso generico

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Puoi utilizzare i criteri per archiviare i dati in una cache generica per un recupero più rapido. Utilizzando i seguenti criteri, il proxy può memorizzare e recuperare i dati memorizzati nella cache in fase di esecuzione:

Questi criteri sono progettati per la memorizzazione nella cache generale dei dati utilizzati dai proxy.

Il codice campione in questo argomento si basa sul proxy di OAuth di entrata su GitHub. Questo esempio utilizza il criterio di cache per memorizzare un token di accesso OAuth da riutilizzare in più chiamate in uscita.

Nell'esempio seguente, un token di accesso OAuth viene scritto nella cache utilizzando un criterio PopulateCache. Il token OAuth viene recuperato per le richieste successive da una norma LookupCache. Una volta scaduto il token di accesso, viene utilizzato JavaScript per recuperare un nuovo token di accesso, che viene memorizzato nella cache dal criterio PopulateCache.

Compilare la cache

Utilizza il criterio PopulateCache per scrivere dati nella cache. Questo esempio scrive un token di accesso OAuth nella cache. Per informazioni di riferimento sui criteri, consulta Criteri per compilare la 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>

Le variabili possono essere completate in base ai criteri o al codice. La variabile Source in questo esempio viene compilata dalla seguente chiamata JavaScript: context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Per saperne di più sulle chiavi di cache, consulta Utilizzo delle chiavi di cache.

Cerca i dati memorizzati nella cache

Puoi recuperare i valori memorizzati nella cache con il criterio LookupCache. La seguente policy LookupCache legge un valore da mycache e lo scrive nella variabile twitter-translate.apiAccessToken. Per informazioni di riferimento sulle norme, consulta le norme relative a 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>

Annullare la convalida della cache

La cache può essere invalidata esplicitamente specificando un'intestazione HTTP. Quando viene ricevuta una richiesta che contiene l'intestazione HTTP specificata, la cache viene svuotata. Per informazioni di riferimento sulle norme, consulta le norme relative a 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>