ResponseCache নীতি

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

এটি একটি ব্যাকএন্ড রিসোর্স থেকে ডেটা ক্যাশ করে, যার ফলে সেই রিসোর্সে অনুরোধের সংখ্যা কমে যায়। যখন অ্যাপগুলো একই URI-তে অনুরোধ পাঠায়, তখন আপনি সেই অনুরোধগুলোকে ব্যাকএন্ড সার্ভারে ফরোয়ার্ড না করে, ক্যাশ করা প্রতিক্রিয়া ফেরত দেওয়ার জন্য এই পলিসিটি ব্যবহার করতে পারেন। ResponseCache পলিসিটি ল্যাটেন্সি এবং নেটওয়ার্ক ট্র্যাফিক কমানোর মাধ্যমে আপনার API-এর পারফরম্যান্স উন্নত করতে পারে।

আপনার এপিআই দ্বারা ব্যবহৃত ব্যাকএন্ড ডেটা যখন কেবল নির্দিষ্ট সময় পর পর আপডেট করা হয়, তখন রেসপন্সক্যাশ আপনার কাছে সবচেয়ে বেশি উপযোগী মনে হতে পারে। উদাহরণস্বরূপ, ধরুন আপনার একটি এপিআই আছে যা প্রতি দশ মিনিট পর পর রিফ্রেশ হওয়া আবহাওয়ার প্রতিবেদনের ডেটা সরবরাহ করে। রিফ্রেশের মধ্যবর্তী সময়ে ক্যাশ করা রেসপন্স ফেরত দেওয়ার জন্য রেসপন্সক্যাশ ব্যবহার করে, আপনি ব্যাকএন্ডে পৌঁছানো রিকোয়েস্টের সংখ্যা কমাতে পারেন। এর ফলে নেটওয়ার্ক হপের সংখ্যাও কমে যায়।

সাধারণ স্বল্পমেয়াদী ক্যাশিংয়ের জন্য Populate Cache পলিসি ব্যবহার করার কথা বিবেচনা করা যেতে পারে। এই পলিসিটি Lookup Cache পলিসি (ক্যাশ এন্ট্রি পড়ার জন্য) এবং Invalidate Cache পলিসি (এন্ট্রি বাতিল করার জন্য) এর সাথে একত্রে ব্যবহৃত হয়।

রেসপন্স ক্যাশ পলিসি সম্পর্কে প্রাথমিক ধারণা পেতে এই ভিডিওটি দেখুন।

নমুনা

১০ মিনিটের ক্যাশে

এই নমুনাটি দেখায় কীভাবে ক্যাশ করা প্রতিক্রিয়াগুলি ১০ মিনিটের জন্য সংরক্ষণ করা যায়।

ধরুন, আপনার নিম্নলিখিত URL-এ একটি API আছে:

http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778

আপনি কোয়েরি প্যারামিটার w একটি ক্যাশ কী হিসেবে ব্যবহার করছেন। যখনই কোনো অনুরোধ আসে, Apigee Edge কোয়েরি প্যারামিটার w এর মান যাচাই করে। যদি ক্যাশে একটি বৈধ (অর্থাৎ, মেয়াদোত্তীর্ণ নয়) প্রতিক্রিয়া উপস্থিত থাকে, তাহলে ক্যাশ করা প্রতিক্রিয়া বার্তাটি অনুরোধকারী ক্লায়েন্টের কাছে ফেরত পাঠানো হয়।

এখন কল্পনা করুন যে আপনার একটি ResponseCache পলিসি নিম্নরূপভাবে কনফিগার করা আছে।

<ResponseCache name="ResponseCache">
    <CacheKey>
        <KeyFragment ref="request.queryparam.w" />
    </CacheKey>
    <ExpirySettings>
        <TimeoutInSeconds>600</TimeoutInSeconds>
    </ExpirySettings>
</ResponseCache>

এপিআই প্রক্সি যখন প্রথমবার নিম্নলিখিত ইউআরএল-এর জন্য একটি অনুরোধ বার্তা পায়, তখন প্রতিক্রিয়াটি ক্যাশ করা হয়। ১০ মিনিটের মধ্যে দ্বিতীয় অনুরোধের ক্ষেত্রে, একটি ক্যাশ লুকআপ ঘটে — ক্যাশ করা প্রতিক্রিয়াটি অ্যাপে ফেরত পাঠানো হয় এবং ব্যাকএন্ড পরিষেবাতে কোনো অনুরোধ পাঠানো হয় না।

http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778

ক্যাশে অনুসন্ধান এড়িয়ে যান

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে ক্যাশে লুকআপ এড়িয়ে গিয়ে ক্যাশে রিফ্রেশ করা যায়। SkipCacheLookup-এর ব্যবহার সম্পর্কে এই ভিডিওটিও দেখুন।

ঐচ্ছিক SkipCacheLookup শর্তটি (যদি কনফিগার করা থাকে) রিকোয়েস্ট পাথে মূল্যায়ন করা হয়। যদি শর্তটি 'true' হয়, তাহলে ক্যাশে লুকআপ এড়িয়ে যাওয়া হয় এবং ক্যাশে রিফ্রেশ করা হয়।

শর্তসাপেক্ষ ক্যাশ রিফ্রেশের একটি সাধারণ ব্যবহার হলো এমন একটি শর্ত স্থাপন করা, যা একটি নির্দিষ্ট HTTP হেডার নির্ধারণ করে এবং সেই হেডারের ফলে শর্তটি সত্য বলে প্রমাণিত হয়। একটি স্ক্রিপ্টযুক্ত ক্লায়েন্ট অ্যাপ্লিকেশনকে এমনভাবে কনফিগার করা যেতে পারে, যা পর্যায়ক্রমে উপযুক্ত HTTP হেডারসহ একটি অনুরোধ জমা দেবে এবং এর মাধ্যমে রেসপন্স ক্যাশটি সুস্পষ্টভাবে রিফ্রেশ হবে।

উদাহরণস্বরূপ, নিম্নলিখিত URL-এ একটি API কল করার কথা ভাবুন:

'http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778' -H "bypass-cache:true"

এখন কল্পনা করুন যে ওই প্রক্সিতে নিম্নলিখিত ResponseCache পলিসিটি কনফিগার করা আছে। লক্ষ্য করুন যে, bypass-cache শর্তটি true-তে সেট করা আছে।

<ResponseCache name="ResponseCache">
    <CacheKey>
        <KeyFragment ref="request.queryparam.w" />
    </CacheKey>
    <!-- Explicitly refresh the cached response -->
    <SkipCacheLookup>request.header.bypass-cache = "true"</SkipCacheLookup>
    <ExpirySettings>
        <TimeoutInSeconds>600</TimeoutInSeconds>
    </ExpirySettings>
</ResponseCache>

শর্তাবলী সম্পর্কে আরও তথ্যের জন্য, ফ্লো ভেরিয়েবল এবং শর্তাবলী দেখুন।

উপাদান রেফারেন্স

এলিমেন্ট রেফারেন্সটি পলিসির উপাদান এবং অ্যাট্রিবিউটগুলো বর্ণনা করে।

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
    <DisplayName>Response Cache 1</DisplayName>
    <Properties/>
    <CacheKey>
        <Prefix/>
        <KeyFragment ref="request.uri" />
    </CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
        <ExpiryDate/>
        <TimeOfDay/>
        <TimeoutInSeconds ref="flow.variable.here">300</TimeoutInSeconds>
    </ExpirySettings>
    <CacheResource>cache_to_use</CacheResource>
    <CacheLookupTimeoutInSeconds/>
    <ExcludeErrorResponse/>
    <SkipCacheLookup/>
    <SkipCachePopulation/>
    <UseAcceptHeader/>
    <UseResponseCacheHeaders/>
</ResponseCache>

<ResponseCache> অ্যাট্রিবিউট

<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">

নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
name

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<ক্যাশকী> উপাদান

ক্যাশে সংরক্ষিত কোনো ডেটার জন্য একটি অনন্য পয়েন্টার কনফিগার করে।

ক্যাশ কী-গুলির আকার ২ কিলোবাইটে সীমাবদ্ধ।

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

ডিফল্ট:

প্রযোজ্য নয়

উপস্থিতি:

প্রয়োজনীয়

প্রকার:

প্রযোজ্য নয়

<CacheKey> ক্যাশে সংরক্ষিত প্রতিটি ডেটার নাম তৈরি করে। এই কী-টি প্রায়শই এনটিটি হেডার বা কোয়েরি প্যারাম থেকে একটি ভ্যালু ব্যবহার করে সেট করা হয়। সেই ক্ষেত্রে, এলিমেন্টের ref অ্যাট্রিবিউটে কী-ভ্যালু ধারণকারী একটি ভ্যারিয়েবল নির্দিষ্ট করা থাকে।

রানটাইমে, <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> এর সাথে একত্রে ব্যবহার করেন। আরও তথ্যের জন্য, “ক্যাশ কী নিয়ে কাজ করা” দেখুন।

<CacheLookupTimeoutInSeconds> এলিমেন্ট

কত সেকেন্ড পর একটি অসফল ক্যাশ লুকআপকে ক্যাশ মিস হিসেবে গণ্য করা হবে, তা নির্দিষ্ট করে। এমনটি ঘটলে, ফ্লোটি ক্যাশ-মিস পথ ধরে পুনরায় শুরু হয়।

<CacheLookupTimeoutInSeconds>30</CacheLookupTimeoutInSeconds>

ডিফল্ট:

৩০

উপস্থিতি:

ঐচ্ছিক

প্রকার:

পূর্ণসংখ্যা

<ক্যাশরিসোর্স> উপাদান

যে ক্যাশে বার্তাগুলি সংরক্ষণ করা হবে তা নির্দিষ্ট করে। অন্তর্ভুক্ত শেয়ার্ড ক্যাশে ব্যবহার করতে এই উপাদানটি বাদ দিন। আপনি যদি ক্যাশে থাকা এন্ট্রিগুলি প্রশাসনিকভাবে মুছে ফেলতে চান, তবে আপনাকে নামসহ একটি 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> এর সাথে একত্রে ব্যবহার করেন। আরও তথ্যের জন্য, “ক্যাশ কী নিয়ে কাজ করা” দেখুন।

বৈশিষ্ট্য

বৈশিষ্ট্য প্রকার ডিফল্ট প্রয়োজনীয় বর্ণনা
রেফারেন্স স্ট্রিং না

যে ভেরিয়েবল থেকে মানটি নেওয়া হবে। যদি এই এলিমেন্টটিতে কোনো আক্ষরিক মান থাকে, তবে এটি ব্যবহার করা উচিত নয়।

<ক্যাশকী>/<প্রিফিক্স> উপাদান

ক্যাশ কী প্রিফিক্স হিসেবে ব্যবহার করার জন্য একটি মান নির্দিষ্ট করে।

<Prefix>prefix_string</Prefix>

ডিফল্ট:

প্রযোজ্য নয়

উপস্থিতি:

ঐচ্ছিক

প্রকার:

স্ট্রিং

যখন আপনি <Scope> দ্বারা তালিকাভুক্ত কোনো মানের পরিবর্তে আপনার নিজস্ব মান নির্দিষ্ট করতে চান, তখন <Scope> -এর বদলে এই মানটি ব্যবহার করুন। যদি সংজ্ঞায়িত করা থাকে, তাহলে <Prefix> ক্যাশে লেখা এন্ট্রিগুলির শুরুতে ক্যাশে কী-এর মান যুক্ত করে। একটি <Prefix> এলিমেন্টের মান একটি <Scope> এলিমেন্টের মানকে ওভাররাইড করে।

আপনি <Prefix> এলিমেন্টটি <CacheKey> এবং <Scope> এর সাথে একত্রে ব্যবহার করেন। আরও তথ্যের জন্য, “Working with cache keys” দেখুন।

<ExcludeErrorResponse> উপাদান

বর্তমানে, ডিফল্টরূপে, এই পলিসিটি যেকোনো সম্ভাব্য স্ট্যাটাস কোডসহ HTTP রেসপন্স ক্যাশ করে। এর মানে হলো, সফল এবং ত্রুটিপূর্ণ উভয় ধরনের রেসপন্সই ক্যাশ করা হয়। উদাহরণস্বরূপ, 2xx এবং 3xx উভয় স্ট্যাটাস কোডযুক্ত রেসপন্স ডিফল্টরূপে ক্যাশ করা হয়।

আপনি যদি HTTP ত্রুটি স্ট্যাটাস কোড সহ টার্গেট রেসপন্স ক্যাশ করতে না চান, তাহলে এই এলিমেন্টটি ' true সেট করুন; এই এলিমেন্টটি 'true' হলে শুধুমাত্র 200 থেকে 205 স্ট্যাটাস কোডযুক্ত রেসপন্সগুলোই ক্যাশ করা হবে। Edge শুধুমাত্র এই HTTP স্ট্যাটাস কোডগুলোকেই 'সফল' কোড হিসেবে গণ্য করে, এবং আপনি এই সম্পর্কটি পরিবর্তন করতে পারবেন না।

রেসপন্স ক্যাশ প্যাটার্নগুলোর মধ্যে কোনগুলোতে এই এলিমেন্টটি উপযোগী, সে বিষয়ে আলোচনার জন্য এই কমিউনিটি পোস্টটি দেখুন।

দ্রষ্টব্য: ভবিষ্যতের কোনো রিলিজে (যা পরে নির্ধারণ করা হবে), এই এলিমেন্টের ডিফল্ট সেটিং পরিবর্তন করে 'true' করা হবে। বিস্তারিত জানতে Apigee রিলিজ নোট দেখুন।

<ExcludeErrorResponse>true</ExcludeErrorResponse>

ডিফল্ট:

মিথ্যা

উপস্থিতি:

ঐচ্ছিক

প্রকার:

বুলিয়ান

<ExpirySettings> উপাদান

একটি ক্যাশ এন্ট্রির মেয়াদ কখন শেষ হবে তা নির্দিষ্ট করে। এটি উপস্থিত থাকলে, <TimeoutInSeconds> <TimeOfDay> এবং <ExpiryDate> উভয়কেই ওভাররাইড করে।

<ExpirySettings>
  <TimeOfDay ref="time_variable">expiration_time</TimeOfDay>
  <TimeoutInSeconds ref="duration_variable">seconds_until_expiration</TimeoutInSeconds>
  <ExpiryDate ref="date_variable">expiration_date</ExpiryDate>
</ExpirySettings>

ডিফল্ট:

প্রযোজ্য নয়

উপস্থিতি:

প্রয়োজনীয়

প্রকার:

প্রযোজ্য নয়

<ExpirySettings> /<ExpiryDate> এলিমেন্ট

যে তারিখে একটি ক্যাশ এন্ট্রির মেয়াদ শেষ হবে, তা নির্দিষ্ট করে। mm-dd-yyyy ফর্ম্যাটটি ব্যবহার করুন। উপস্থিত থাকলে, এই এলিমেন্টের সহোদর এলিমেন্ট, <TimeoutInSeconds> , <ExpiryDate> কে ওভাররাইড করে।

<ExpirySettings>
    <ExpiryDate ref="{date_variable}">expiration_date</ExpiryDate>
</ExpirySettings>

ডিফল্ট:

প্রযোজ্য নয়

উপস্থিতি:

ঐচ্ছিক

প্রকার:

স্ট্রিং

বৈশিষ্ট্য

<ExpiryDate ref="" />
বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি প্রকার
রেফারেন্স

যে ভেরিয়েবল থেকে মানটি নেওয়া হবে। যদি এই এলিমেন্টটিতে কোনো আক্ষরিক মান থাকে, তবে এটি ব্যবহার করা উচিত নয়।

প্রযোজ্য নয় ঐচ্ছিক স্ট্রিং

<ExpirySettings>/<TimeOfDay> এলিমেন্ট

দিনের যে সময়ে একটি ক্যাশ এন্ট্রির মেয়াদ শেষ হবে। hh:mm:ss ফর্ম্যাটটি ব্যবহার করুন। এটি উপস্থিত থাকলে, এই এলিমেন্টের সহোদর <TimeoutInSeconds> এলিমেন্টটি <TimeOfDay> ওভাররাইড করে।

দিনের সময় HH:mm:ss ফরম্যাটে লিখুন, যেখানে HH হলো ২৪-ঘণ্টার ঘড়ির ঘণ্টা। উদাহরণস্বরূপ, বিকেল ২:৩০ এর জন্য 14:30:00।

দিনের সময়ের জন্য, ডিফল্ট লোকেল এবং টাইম জোন পরিবর্তিত হবে কোডটি কোথায় চলছে তার উপর নির্ভর করে (যা পলিসি কনফিগার করার সময় জানা সম্ভব নয়)। আপনার লোকেল কনফিগার করার তথ্যের জন্য, “একটি এনভায়রনমেন্ট ক্যাশে তৈরি এবং সম্পাদনা করা” দেখুন।

<ExpirySettings>
    <TimeOfDay ref="time_variable">expiration_time</TimeOfDay>
</ExpirySettings>

ডিফল্ট:

প্রযোজ্য নয়

উপস্থিতি:

ঐচ্ছিক

প্রকার:

স্ট্রিং

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি প্রকার
রেফারেন্স মেয়াদোত্তীর্ণের সময় মান সহ পরিবর্তনশীল। প্রযোজ্য নয় ঐচ্ছিক স্ট্রিং

<ExpirySettings>/<TimeoutInSec> এলিমেন্ট

যে সংখ্যক সেকেন্ড পরে একটি ক্যাশ এন্ট্রির মেয়াদ শেষ হবে।