Örnek: Genel amaçlı önbelleğe alma

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Verileri daha hızlı almak için genel amaçlı bir önbellekte depolamak amacıyla politikaları kullanabilirsiniz. Aşağıdaki politikaları kullanarak proxy'niz, çalışma zamanında önbelleğe alınan verileri depolayabilir ve alabilir:

Bu politikalar, proxy'leriniz tarafından kullanılan verilerin genel olarak önbelleğe alınması için tasarlanmıştır.

Bu konudaki örnek kod, GitHub'daki Giden OAuth örnek proxy'sini temel almaktadır (Örnekler listesi bölümüne bakın). Bu örnekte, birden fazla giden çağrıda yeniden kullanılmak üzere bir OAuth erişim jetonu depolamak için önbellek politikası kullanılmaktadır.

Her politika türü, bir XML şeması (.xsd) ile tanımlanır. Referans olması açısından, GitHub'da politika şemalarını bulabilirsiniz.

Aşağıdaki örnekte OAuth erişim jetonu, PopulateCache politikası kullanılarak önbelleğe yazılmıştır. OAuth jetonu, bir LookupCache politikası tarafından sonraki istekler için alınır. Erişim jetonunun süresi dolduktan sonra, JavaScript yeni bir erişim jetonu almak için kullanılır ve bu jeton, PopulateCache politikası tarafından önbelleğe alınır.

Önbelleği doldur

Önbelleğe veri yazmak için PopulateCache politikasını kullanın. Bu örnekte önbelleğe bir OAuth erişim jetonu yazılır. Politika referans bilgileri için Önbellek politikasını doldurma bölümüne bakın.

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

Değişkenler, politikalar veya kod kullanılarak doldurulabilir. Bu örnekteki Source değişkeni, şu JavaScript çağrısı tarafından doldurulur: context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Önbellek anahtarları hakkında daha fazla bilgi için Önbellek anahtarlarıyla çalışma konusuna bakın.

Önbelleğe alınan verileri ara

LookupCache politikasını kullanarak önbelleğe alınan değerleri alabilirsiniz. Aşağıdaki LookupCache politikası, mycache alanındaki bir değeri okur ve bu değeri twitter-translate.apiAccessToken değişkenine yazar. Politika referans bilgileri için LookupCache politikası bölümüne bakın.

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

Önbelleği geçersiz kılın

Önbellek, bir HTTP üstbilgisi belirtilerek açıkça geçersiz kılınabilir. Belirtilen HTTP üst bilgisini içeren bir istek alındığında önbellek temizlenir. Politika referans bilgileri için InValidCache politikası bölümüne bakın.

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