पॉप्युलेट कैश मेमोरी की नीति

यह Apigee Edge के दस्तावेज़ हैं.
पर जाएं Apigee X दस्तावेज़.
info

यह कॉन्फ़िगर करता है कि रनटाइम के दौरान, कैश मेमोरी में सेव की गई वैल्यू कैसे लिखी जानी चाहिए.

पॉप्युलेट कैश नीति, कम समय के लिए सामान्य मकसद वाली कैश मेमोरी में एंट्री लिखने के लिए बनाई गई है. इसका इस्तेमाल, लुकअप कैश नीति (कैश मेमोरी में सेव की गई एंट्री पढ़ने के लिए) और इनवैलिडेट कैश नीति (एंट्री को अमान्य करने के लिए) के साथ किया जाता है.

बैकएंड संसाधनों के रिस्पॉन्स को कैश मेमोरी में सेव करने के लिए, रिस्पॉन्स कैश नीति देखें.

एलिमेंट का रेफ़रंस

यहां उन एलिमेंट की सूची दी गई है जिन्हें इस नीति के तहत कॉन्फ़िगर किया जा सकता है.

<PopulateCache async="false" continueOnError="false" enabled="true" name="Populate-Cache-1">
    <DisplayName>Populate Cache 1</DisplayName>
    <Properties/>
    <CacheKey>
        <Prefix/>
        <KeyFragment ref=""/>
    </CacheKey>
    <!-- Omit this element if you're using the included shared cache. -->
    <CacheResource/>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
        <TimeoutInSeconds>300</TimeoutInSeconds>
    </ExpirySettings>
    <Source>flowVar</Source>
</PopulateCache>

<PopulateCache> एट्रिब्यूट

यहां दी गई टेबल में, ऐसे एट्रिब्यूट के बारे में बताया गया है जो नीति के सभी पैरंट एलिमेंट में एक जैसे होते हैं:

एट्रिब्यूट ब्यौरा डिफ़ॉल्ट मौजूदगी
name

नीति का अंदरूनी नाम. name एट्रिब्यूट की वैल्यू ये काम कर सकती है: अक्षरों, संख्याओं, स्पेस, हाइफ़न, अंडरस्कोर, और फ़ुलस्टॉप को शामिल करें. यह मान नहीं हो सकता 255 वर्णों से ज़्यादा होने चाहिए.

इसके अलावा, नीति को लेबल करने के लिए, <DisplayName> एलिमेंट का इस्तेमाल करें प्रबंधन यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर को अलग, आम भाषा में इस्तेमाल करने वाले नाम के साथ किया जा सकता है.

लागू नहीं ज़रूरी है
continueOnError

किसी नीति के काम न करने पर, गड़बड़ी दिखाने के लिए false पर सेट करें. यह उम्मीद है व्यवहार की जानकारी देने वाला डेटा.

नीति के लागू होने के बाद भी फ़्लो को एक्ज़ीक्यूट करने के लिए, इसे true पर सेट करें विफल होता है.

गलत वैकल्पिक
enabled

नीति को लागू करने के लिए, true पर सेट करें.

नीति को बंद करने के लिए, false पर सेट करें. नीति लागू किया जाता है, भले ही वह किसी फ़्लो से जुड़ा रहता हो.

सही वैकल्पिक
async

यह एट्रिब्यूट अब काम नहीं करता.

गलत बहिष्कृत

&lt;DisplayName&gt; एलिमेंट

इस कॉलम में नीति को लेबल करने के लिए, name एट्रिब्यूट के साथ-साथ इस्तेमाल करें मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर, जिसका नाम अलग और सामान्य भाषा में है.

<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट

लागू नहीं

अगर आप इस एलिमेंट को छोड़ देते हैं, तो नीति की name एट्रिब्यूट की वैल्यू यह होगी इस्तेमाल किया गया.

मौजूदगी वैकल्पिक
टाइप स्ट्रिंग

<CacheKey> एलिमेंट

यह कैश मेमोरी में सेव किए गए डेटा के किसी हिस्से के लिए, यूनीक पॉइंटर को कॉन्फ़िगर करता है.

कैश मेमोरी की कुंजियों का साइज़ 2 केबी से ज़्यादा नहीं हो सकता.

<CacheKey>
    <Prefix>string</Prefix>
    <KeyFragment ref="variable_name" />
    <KeyFragment>literal_string</KeyFragment>
</CacheKey>

डिफ़ॉल्ट:

लागू नहीं

मौजूद होना:

ज़रूरी है

टाइप:

लागू नहीं

<CacheKey> कैश मेमोरी में सेव किए गए डेटा के हर हिस्से का नाम बनाता है.

रनटाइम के दौरान, <KeyFragment> वैल्यू के पहले, या तो <Scope> एलिमेंट की वैल्यू या <Prefix> की वैल्यू जोड़ी जाती है. उदाहरण के लिए, इससे UserToken__apiAccessToken__<value_of_client_id> के फ़ॉर्मैट में कैश मेमोरी की कुंजी बनती है:

<CacheKey>
    <Prefix>UserToken</Prefix>
    <KeyFragment>apiAccessToken</KeyFragment>
    <KeyFragment ref="request.queryparam.client_id" />
</CacheKey>

<CacheKey> एलिमेंट का इस्तेमाल, <Prefix> और <Scope> के साथ किया जाता है. ज़्यादा जानकारी के लिए, कैश मेमोरी की कुंजियों के साथ काम करना लेख पढ़ें.

<CacheResource> एलिमेंट

यह उस कैश मेमोरी के बारे में बताता है जिसमें मैसेज सेव किए जाने चाहिए.

अगर यह नीति (और इससे जुड़ी लुकअप कैश और इनवैलिडेट कैश नीतियां), शामिल की गई शेयर की गई कैश मेमोरी का इस्तेमाल कर रही है, तो इस एलिमेंट को पूरी तरह से छोड़ दें.

<CacheResource>cache_to_use</CacheResource>

डिफ़ॉल्ट:

लागू नहीं

मौजूद होना:

ज़रूरी नहीं है

टाइप:

स्ट्रिंग

कैश मेमोरी को कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, एनवायरमेंट कैश मेमोरी बनाना और उसमें बदलाव करना लेख पढ़ें.

<CacheKey>/<KeyFragment> एलिमेंट

यह एक ऐसी वैल्यू तय करता है जिसे कैश मेमोरी की कुंजी में शामिल किया जाना चाहिए. इससे, कैश मेमोरी में सेव किए गए रिस्पॉन्स से मेल खाने वाले अनुरोधों के लिए नेमस्पेस बनता है.

<KeyFragment ref="variable_name"/>
<KeyFragment>literal_string</KeyFragment>

डिफ़ॉल्ट:

लागू नहीं

मौजूद होना:

ज़रूरी नहीं है

टाइप:

लागू नहीं

यह कुंजी (आपके दिए गए स्टैटिक नाम) या वैल्यू (किसी वैरिएबल का रेफ़रंस देकर सेट की गई डाइनैमिक एंट्री) हो सकती है. कैश मेमोरी की कुंजी बनाने के लिए, तय किए गए सभी फ़्रैगमेंट (और प्रीफ़िक्स) को जोड़ा जाता है

<KeyFragment>apiAccessToken</KeyFragment>
<KeyFragment ref="request.queryparam.client_id" />

<KeyFragment> एलिमेंट का इस्तेमाल, <Prefix> और <Scope> के साथ किया जाता है. ज़्यादा जानकारी के लिए, कैश मेमोरी की कुंजियों के साथ काम करना लेख पढ़ें.

विशेषताएं

एट्रिब्यूट टाइप डिफ़ॉल्ट ज़रूरी है ब्यौरा
ref स्ट्रिंग नहीं

वह वैरिएबल जिससे वैल्यू लेनी है. अगर इस एलिमेंट में लिटरल वैल्यू शामिल है, तो इसका इस्तेमाल नहीं किया जाना चाहिए.

<CacheKey>/<Prefix> एलिमेंट

यह कैश मेमोरी की कुंजी के प्रीफ़िक्स के तौर पर इस्तेमाल की जाने वाली वैल्यू तय करता है.

<Prefix>prefix_string</Prefix>

डिफ़ॉल्ट:

लागू नहीं

मौजूद होना:

ज़रूरी नहीं है

टाइप:

स्ट्रिंग

जब आपको <Scope> में दी गई वैल्यू के बजाय, अपनी वैल्यू तय करनी हो , तब <Scope> के बजाय इस वैल्यू का इस्तेमाल करें. अगर तय किया जाता है, तो <Prefix> कैश मेमोरी में लिखी गई एंट्री के लिए, कैश मेमोरी की कुंजी की वैल्यू के पहले जोड़ा जाता है. A <Prefix> एलिमेंट की वैल्यू, <Scope> एलिमेंट की वैल्यू को बदल देती है.

<Prefix> एलिमेंट का इस्तेमाल, <CacheKey> और <Scope> के साथ किया जाता है. ज़्यादा जानकारी के लिए, कैश मेमोरी की कुंजियों के साथ काम करना लेख पढ़ें.

<ExpirySettings> एलिमेंट

यह तय करता है कि कैश मेमोरी में सेव की गई कोई एंट्री कब खत्म होनी चाहिए. अगर मौजूद है, तो <TimeoutInSeconds> दोनों <TimeOfDay> और <ExpiryDate> को बदल देता है.

<ExpirySettings>
  <!-- use exactly one of the following child elements -->
  <TimeoutInSeconds ref="duration_variable">seconds_until_expiration</TimeoutInSeconds>
  <ExpiryDate ref="date_variable">expiration_date</ExpiryDate>
  <TimeOfDay ref="time_variable">expiration_time</TimeOfDay>
</ExpirySettings>

डिफ़ॉल्ट:

लागू नहीं

मौजूद होना:

ज़रूरी है

टाइप:

लागू नहीं

<ExpirySettings> के चाइल्ड एलिमेंट

सिर्फ़ एक चाइल्ड एलिमेंट का इस्तेमाल करें. यहां दी गई टेबल में, <ExpirySettings> के चाइल्ड एलिमेंट के बारे में बताया गया है:

चाइल्ड एलिमेंट ब्यौरा
<TimeoutInSeconds>

यह उन सेकंड की संख्या है जिनके बाद, कैश मेमोरी में सेव की गई कोई एंट्री खत्म हो जानी चाहिए.

<ExpirySettings>
  <TimeoutInSeconds ref="var-containing-duration">expiry</TimeoutInSeconds>
</ExpirySettings>

यह एलिमेंट, अब इस्तेमाल में नहीं लाए जाने वाले TimeoutInSec एलिमेंट की जगह लेता है.

<ExpiryDate>

यह वह तारीख तय करता है जिस दिन, कैश मेमोरी में सेव की गई कोई एंट्री खत्म हो जानी चाहिए. ` ` फ़ॉर्मैट में कोई स्ट्रिंग तय करें mm-dd-yyyy.

<ExpirySettings>
  <ExpiryDate ref="var-containing-date">expiry</ExpiryDate>
</ExpirySettings>

अगर तय की गई तारीख, पिछली तारीख है, तो नीति, कैश मेमोरी में सेव की गई एंट्री पर, ज़्यादा से ज़्यादा समय-से-लाइव वैल्यू लागू करेगी. यह ज़्यादा से ज़्यादा 30 दिन है.

<TimeOfDay>

यह वह समय तय करता है जिस समय, कैश मेमोरी में सेव की गई कोई एंट्री खत्म हो जानी चाहिए. `HH:mm:ss` फ़ॉर्मैट में कोई स्ट्रिंग तय करें. यहां HH, UTC टाइम ज़ोन में 24 घंटे की घड़ी के हिसाब से घंटे दिखाता है. उदाहरण के लिए, 14:30:00 का मतलब है दोपहर के 2:30.

<ExpirySettings>
  <TimeOfDay ref="var-containing-time">expiry</TimeOfDay>
</ExpirySettings>

आपको सिर्फ़ एक चाइल्ड एलिमेंट तय करना चाहिए. अगर एक से ज़्यादा एलिमेंट तय किए जाते हैं, तो प्राथमिकता का क्रम यह होगा:TimeoutInSeconds, ExpiryDate, TimeOfDay.

ऊपर दिए गए <ExpirySettings> के हर चाइल्ड एलिमेंट के साथ, अगर चाइल्ड एलिमेंट पर, ज़रूरी नहीं है वाला ref एट्रिब्यूट तय किया जाता है, तो नीति, तय किए गए कॉन्टेक्स्ट वैरिएबल से, खत्म होने की वैल्यू को वापस पाएगी. अगर वैरिएबल तय नहीं किया जाता है, तो नीति, चाइल्ड एलिमेंट की लिटरल टेक्स्ट वैल्यू का इस्तेमाल करती है.

<Scope> एलिमेंट

यह एक ऐसा एनमरेशन है जिसका इस्तेमाल, कैश मेमोरी की कुंजी के लिए प्रीफ़िक्स बनाने के लिए किया जाता है. ऐसा तब किया जाता है, जब <Prefix> एलिमेंट में <CacheKey> एलिमेंट न दिया गया हो.

<Scope>scope_enumeration</Scope>

डिफ़ॉल्ट:

"एक्सक्लूसिव"

मौजूद होना:

ज़रूरी नहीं है

टाइप:

स्ट्रिंग

<Scope> सेटिंग, कैश मेमोरी की एक ऐसी कुंजी तय करती है जिसके पहले, <Scope> की वैल्यू के हिसाब से प्रीफ़िक्स जोड़ा जाता है. उदाहरण के लिए, स्कोप को Exclusive पर सेट करने पर, कैश मेमोरी की कुंजी इस फ़ॉर्मैट में होगी जब

orgName__envName__apiProxyName__deployedRevisionNumber__proxy|TargetName__ [ serializedCacheKey ]

अगर <Prefix> एलिमेंट <CacheKey> में मौजूद है, तो यह <Scope> एलिमेंट की वैल्यू को बदल देता है. मान्य वैल्यू में, नीचे दिए गए एनमरेशन शामिल हैं.

<Scope> एलिमेंट का इस्तेमाल, <CacheKey> और <Prefix> के साथ किया जाता है. ज़्यादा जानकारी के लिए, कैश मेमोरी की कुंजियों के साथ काम करना लेख पढ़ें.

स्वीकार की जा सकने वाली वैल्यू

Global

कैश मेमोरी की कुंजी, एनवायरमेंट में डिप्लॉय किए गए सभी एपीआई प्रॉक्सी के साथ शेयर की जाती है. कैश मेमोरी की कुंजी के पहले, orgName __ envName __ फ़ॉर्मैट में प्रीफ़िक्स जोड़ा जाता है.

अगर <CacheKey> एंट्री को <KeyFragment> apiAccessToken और <Global> स्कोप के साथ तय किया जाता है, तो हर एंट्री को orgName__envName__apiAccessToken के तौर पर सेव किया जाता है. इसके बाद, ऐक्सेस टोकन की सीरियलाइज़ की गई वैल्यू सेव की जाती है. 'apifactory' नाम के संगठन में 'test' नाम के एनवायरमेंट में डिप्लॉय किए गए एपीआई प्रॉक्सी के लिए, ऐक्सेस टोकन को इस कैश मेमोरी की कुंजी के तहत सेव किया जाएगा: apifactory__test__apiAccessToken.

Application

एपीआई प्रॉक्सी के नाम का इस्तेमाल, प्रीफ़िक्स के तौर पर किया जाता है.

कैश मेमोरी की कुंजी के पहले, orgName__envName__apiProxyName फ़ॉर्मैट में प्रीफ़िक्स जोड़ा जाता है.

Proxy

ProxyEndpoint कॉन्फ़िगरेशन का इस्तेमाल, प्रीफ़िक्स के तौर पर किया जाता है.

कैश मेमोरी की कुंजी के पहले, orgName__envName__apiProxyName__deployedRevisionNumber__proxyEndpointName फ़ॉर्मैट में प्रीफ़िक्स जोड़ा जाता है .

Target

TargetEndpoint कॉन्फ़िगरेशन का इस्तेमाल, प्रीफ़िक्स के तौर पर किया जाता है.

कैश मेमोरी की कुंजी के पहले, orgName__envName__apiProxyName__deployedRevisionNumber__targetEndpointName फ़ॉर्मैट में प्रीफ़िक्स जोड़ा जाता है .

Exclusive

डिफ़ॉल्ट. यह सबसे खास है. इसलिए, किसी दी गई कैश मेमोरी में नेमस्पेस टकराव का खतरा कम होता है.

प्रीफ़िक्स के दो फ़ॉर्मैट होते हैं:

  • अगर नीति को ProxyEndpoint फ़्लो से जोड़ा जाता है, तो प्रीफ़िक्स फ़ॉर्मैट में होता है ApiProxyName_ProxyEndpointName.
  • अगर नीति को TargetEndpoint से जोड़ा जाता है, तो प्रीफ़िक्स ApiProxyName_TargetName फ़ॉर्मैट में होता है.

कैश मेमोरी की कुंजी के पहले, orgName__envName__apiProxyName__deployedRevisionNumber__proxyNameITargetName फ़ॉर्मैट में प्रीफ़िक्स जोड़ा जाता है

उदाहरण के लिए, पूरी स्ट्रिंग कुछ इस तरह दिख सकती है:

apifactory__test__weatherapi__16__default__apiAccessToken
.

<Source> एलिमेंट

यह वह वैरिएबल तय करता है जिसकी वैल्यू को कैश मेमोरी में लिखा जाना चाहिए.

<Source>source_variable</Source>

डिफ़ॉल्ट:

लागू नहीं

मौजूद होना:

ज़रूरी है

टाइप:

स्ट्रिंग

इस्तेमाल की जानकारी

सामान्य मकसद वाली कैश मेमोरी के लिए, इस नीति का इस्तेमाल करें. रनटाइम के दौरान, <PopulateCache> नीति, <Source> एलिमेंट में तय किए गए वैरिएबल से डेटा को, <CacheResource> एलिमेंट में तय की गई कैश मेमोरी में लिखती है. आप <CacheKey>, <Scope>, और <Prefix> एलिमेंट का इस्तेमाल करके, एक कुंजी तय कर सकते हैं. इस कुंजी का इस्तेमाल, <LookupCache> नीति से वैल्यू वापस पाने के लिए किया जा सकता है. कैश मेमोरी में सेव की गई वैल्यू कब खत्म होनी चाहिए, यह कॉन्फ़िगर करने के लिए <ExpirySettings> एलिमेंट का इस्तेमाल करें.

पॉप्युलेट कैश नीति, लुकअप कैश नीति और इनवैलिडेट कैश नीति के साथ सामान्य मकसद वाली कैश मेमोरी के लिए, आपके कॉन्फ़िगर की गई कैश मेमोरी या डिफ़ॉल्ट रूप से शामिल की गई शेयर की गई कैश मेमोरी का इस्तेमाल किया जाता है. ज़्यादातर मामलों में, शेयर की गई कैश मेमोरी आपकी ज़रूरतों को पूरा करती है. इस कैश मेमोरी का इस्तेमाल करने के लिए, बस <CacheResource> एलिमेंट को छोड़ दें.

कैश मेमोरी की सीमाएं: कैश मेमोरी की अलग-अलग सीमाएं लागू होती हैं. जैसे, नाम और वैल्यू का साइज़, कैश मेमोरी की कुल संख्या, किसी कैश मेमोरी में मौजूद आइटम की संख्या, और खत्म होने की अवधि.

डेटा स्टोर करने के लिए इस्तेमाल किए जाने वाले सिस्टम के बारे में ज़्यादा जानने के लिए, कैश मेमोरी की अंदरूनी जानकारी लेख पढ़ें. कैश मेमोरी को कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, एनवायरमेंट कैश मेमोरी बनाना और उसमें बदलाव करना लेख पढ़ें.

कैश मेमोरी को एन्क्रिप्ट (सुरक्षित) करने के बारे में जानकारी

पब्लिक क्लाउड के लिए Edge: कैश मेमोरी को सिर्फ़ पीसीआई और HIPAA की ज़रूरी शर्तें पूरी करने वाले संगठनों के लिए एन्क्रिप्ट (सुरक्षित) किया जाता है. ऐसे संगठनों के लिए, एन्क्रिप्ट (सुरक्षित) करने की सुविधा, संगठन को प्रोविज़न करने के दौरान कॉन्फ़िगर की जाती है.

गड़बड़ी के कोड

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP Status Occurs when
policies.populatecache.EntryCannotBeCached 500 An entry cannot be cached. The message object being cached is not an instance of a class that is Serializable.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidCacheResourceReference This error occurs if the <CacheResource> element in the PopulateCache policy is set to a name that does not exist in the environment where the API proxy is being deployed.
CacheNotFound The cache specified in the <CacheResource> element does not exist.

Fault variables

These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name = "EntryCannotBeCached"
populatecache.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. populatecache.POP-CACHE-1.failed = true

Example error response

{
  "fault": {
    "faultstring": "[entry] can not be cached. Only serializable entries are cached.",
    "detail": {
      "errorcode": "steps.populatecache.EntryCannotBeCached"
    }
  }
}

Example fault rule

<FaultRule name="Populate Cache Fault">
    <Step>
        <Name>AM-EntryCannotBeCached</Name>
        <Condition>(fault.name Matches "EntryCannotBeCached") </Condition>
    </Step>
    <Condition>(populatecache.POP-CACHE-1.failed = true) </Condition>
</FaultRule>