سیاست ResponseCache

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

داده‌ها را از یک منبع backend ذخیره می‌کند و تعداد درخواست‌ها به منبع را کاهش می‌دهد. از آنجایی که برنامه‌ها درخواست‌هایی را به همان URI ارسال می‌کنند، می‌توانید از این سیاست برای بازگرداندن پاسخ‌های ذخیره شده به جای ارسال آن درخواست‌ها به سرور backend استفاده کنید. سیاست ResponseCache می‌تواند عملکرد API شما را از طریق کاهش تأخیر و ترافیک شبکه بهبود بخشد.

احتمالاً ResponseCache زمانی بیشترین کاربرد را خواهد داشت که داده‌های backend مورد استفاده توسط API شما فقط به صورت دوره‌ای به‌روزرسانی شوند. برای مثال، تصور کنید API دارید که داده‌های گزارش آب و هوا را فقط هر ده دقیقه به‌روزرسانی می‌کند. با استفاده از ResponseCache برای بازگرداندن پاسخ‌های ذخیره شده بین به‌روزرسانی‌ها، می‌توانید تعداد درخواست‌های رسیده به backend را کاهش دهید. این کار همچنین تعداد پرش‌های شبکه را کاهش می‌دهد.

برای ذخیره‌سازی کوتاه‌مدت و عمومی، استفاده از سیاست Populate Cache را در نظر بگیرید. این سیاست همراه با سیاست Lookup Cache (برای خواندن ورودی‌های حافظه پنهان) و سیاست Invalidate Cache (برای نامعتبر کردن ورودی‌ها) استفاده می‌شود.

برای آشنایی با سیاست Response Cache، این ویدیو را تماشا کنید.

نمونه‌ها

حافظه پنهان ۱۰ دقیقه‌ای

این نمونه نشان می‌دهد که چگونه می‌توان پاسخ‌های ذخیره‌شده را به مدت ۱۰ دقیقه نگه داشت.

تصور کنید که یک 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>

اولین باری که پروکسی API یک پیام درخواست برای URL زیر دریافت می‌کند، پاسخ ذخیره می‌شود. در درخواست دوم ظرف 10 دقیقه، یک جستجوی حافظه پنهان رخ می‌دهد -- پاسخ ذخیره شده به برنامه بازگردانده می‌شود و هیچ درخواستی به سرویس backend ارسال نمی‌شود.

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

صرف نظر کردن از جستجوی حافظه پنهان

مثال زیر نحوه‌ی نادیده گرفتن جستجوی کش و به‌روزرسانی کش را نشان می‌دهد. همچنین این ویدئو را در مورد استفاده از SkipCacheLookup ببینید.

شرط اختیاری SkipCacheLookup (در صورت پیکربندی) در مسیر درخواست ارزیابی می‌شود. اگر شرط درست باشد، جستجوی حافظه پنهان نادیده گرفته شده و حافظه پنهان تازه‌سازی می‌شود.

یک کاربرد رایج از به‌روزرسانی شرطی حافظه پنهان، شرطی است که یک هدر HTTP خاص را تعریف می‌کند که باعث می‌شود شرط به مقدار درست ارزیابی شود. یک برنامه کلاینت اسکریپت‌شده می‌تواند طوری پیکربندی شود که به صورت دوره‌ای درخواستی را با هدر HTTP مناسب ارسال کند و به صراحت باعث به‌روزرسانی حافظه پنهان پاسخ شود.

برای مثال، تصور کنید که یک API در URL زیر فراخوانی می‌شود:

'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 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <CacheKey>

یک اشاره‌گر منحصر به فرد به یک قطعه داده ذخیره شده در حافظه پنهان پیکربندی می‌کند.

کلیدهای حافظه نهان (Cache Keys) به اندازه ۲ کیلوبایت محدود شده‌اند.

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

حافظه پنهانی (cache) که پیام‌ها باید در آن ذخیره شوند را مشخص می‌کند. برای استفاده از حافظه پنهان مشترک، این عنصر را حذف کنید. اگر می‌خواهید بتوانید ورودی‌های موجود در حافظه پنهان را به صورت مدیریتی پاک کنید، باید یک CacheResource را با نام مشخص کنید. برای اطلاعات بیشتر در این مورد، به بخش حافظه‌های پنهان (Caches) مراجعه کنید.

<CacheResource>cache_to_use</CacheResource>

پیش‌فرض:

ناموجود

حضور:

اختیاری

نوع:

رشته

برای اطلاعات بیشتر در مورد پیکربندی حافظه‌های پنهان، به ایجاد و ویرایش حافظه پنهان محیطی مراجعه کنید.

عنصر <CacheKey>/<KeyFragment>

مقداری را مشخص می‌کند که باید در کلید حافظه پنهان (cache key) گنجانده شود و یک فضای نام برای تطبیق درخواست‌ها با پاسخ‌های ذخیره شده در حافظه پنهان ایجاد می‌کند.

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

پیش‌فرض:

ناموجود

حضور:

اختیاری

نوع:

ناموجود

این می‌تواند یک کلید (یک نام استاتیک که شما ارائه می‌دهید) یا یک مقدار (یک ورودی پویا که با ارجاع به یک متغیر تنظیم می‌شود) باشد. تمام قطعات مشخص شده (به علاوه پیشوند) با هم ترکیب می‌شوند تا کلید حافظه پنهان را ایجاد کنند.

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

شما از عنصر <KeyFragment> به همراه <Prefix> و <Scope> استفاده می‌کنید. برای اطلاعات بیشتر، به بخش کار با کلیدهای حافظه پنهان مراجعه کنید.

ویژگی‌ها

ویژگی نوع پیش‌فرض مورد نیاز توضیحات
مرجع رشته خیر

متغیری که مقدار از آن گرفته می‌شود. اگر این عنصر حاوی یک مقدار تحت‌اللفظی باشد، نباید استفاده شود.

عنصر <CacheKey>/<Prefix>

مقداری را برای استفاده به عنوان پیشوند کلید حافظه پنهان مشخص می‌کند.

<Prefix>prefix_string</Prefix>

پیش‌فرض:

ناموجود

حضور:

اختیاری

نوع:

رشته

وقتی می‌خواهید مقدار خودتان را به جای یک مقدار شمارشی <Scope> مشخص کنید، از این مقدار به جای <Scope> استفاده کنید. در صورت تعریف، <Prefix> مقدار کلید cache را برای ورودی‌های نوشته شده در cache به ابتدای آن اضافه می‌کند. مقدار عنصر <Prefix> مقدار عنصر <Scope> را لغو می‌کند.

شما از عنصر <Prefix> به همراه <CacheKey> و <Scope> استفاده می‌کنید. برای اطلاعات بیشتر، به بخش کار با کلیدهای حافظه پنهان مراجعه کنید.

عنصر <ExcludeErrorResponse>

در حال حاضر، به طور پیش‌فرض، این خط‌مشی پاسخ‌های HTTP را با هر کد وضعیت ممکنی ذخیره می‌کند. این بدان معناست که هم پاسخ‌های موفقیت‌آمیز و هم پاسخ‌های خطا ذخیره می‌شوند. به عنوان مثال، پاسخ‌هایی که دارای کدهای وضعیت 2xx و 3xx هستند، به طور پیش‌فرض ذخیره می‌شوند.

اگر نمی‌خواهید پاسخ‌های هدف با کدهای وضعیت خطای HTTP را ذخیره کنید، این عنصر را روی true تنظیم کنید؛ در صورت true بودن این عنصر، فقط پاسخ‌هایی با کدهای وضعیت از ۲۰۰ تا ۲۰۵ ذخیره می‌شوند. اینها تنها کدهای وضعیت HTTP هستند که Edge آنها را به عنوان کدهای "موفق" در نظر می‌گیرد و شما نمی‌توانید این ارتباط را تغییر دهید.

برای بحث در مورد الگوهای Response Cache که این عنصر در آنها مفید است، به این پست انجمن مراجعه کنید.

توجه: در نسخه آینده (که متعاقباً مشخص خواهد شد)، تنظیم پیش‌فرض این عنصر به 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 نشان دهنده ساعت در یک ساعت ۲۴ ساعته است. به عنوان مثال، ۱۴:۳۰:۰۰ برای ساعت ۲:۳۰ بعد از ظهر.

برای زمان روز، زبان و منطقه زمانی پیش‌فرض بسته به مکانی که کد در آن اجرا می‌شود متفاوت خواهد بود (که هنگام پیکربندی خط‌مشی قابل تشخیص نیست). برای اطلاعات بیشتر در مورد پیکربندی زبان خود، به ایجاد و ویرایش حافظه پنهان محیط مراجعه کنید.

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

پیش‌فرض:

ناموجود

حضور:

اختیاری

نوع:

رشته

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
مرجع متغیری با مقدار زمان انقضا. ناموجود اختیاری رشته

عنصر <ExpirySettings>/<TimeoutInSec>

تعداد ثانیه‌هایی که پس از آن یک ورودی کش باید منقضی شود.