سیاست ResponseCache

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

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

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

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

برای آشنایی با سیاست کش پاسخ، این ویدیو را تماشا کنید.

نمونه ها

کش 10 دقیقه ای

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

تصور کنید که یک API در URL زیر دارید:

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

شما از پارامتر query w به عنوان کلید حافظه پنهان استفاده می کنید. Apigee Edge هر زمان که درخواستی دریافت می شود، مقدار پارامتر query w را بررسی می کند. اگر یک پاسخ معتبر (یعنی منقضی نشده) در حافظه پنهان وجود داشته باشد، پیام پاسخ ذخیره شده در حافظه پنهان به مشتری درخواست کننده بازگردانده می شود.

حال تصور کنید که یک سیاست ResponseCache به شکل زیر پیکربندی شده است.

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

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

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

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

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

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

استفاده متداول از refresh شرطی کش شرطی است که یک هدر 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>

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

اندازه کلیدهای کش به 2 کیلوبایت محدود شده است.

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

پیش فرض:

N/A

حضور:

مورد نیاز

نوع:

N/A

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

تعداد ثانیه‌هایی را مشخص می‌کند که پس از آن جستجوی ناموفق حافظه پنهان به عنوان از دست رفته در حافظه پنهان در نظر گرفته می‌شود. اگر این اتفاق بیفتد، جریان در امتداد مسیر cache-miss از سر گرفته می شود.

<CacheLookupTimeoutInSeconds>30</CacheLookupTimeoutInSeconds>

پیش فرض:

30

حضور:

اختیاری

نوع:

عدد صحیح

عنصر <CacheResource>

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

<CacheResource>cache_to_use</CacheResource>

پیش فرض:

N/A

حضور:

اختیاری

نوع:

رشته

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

عنصر <CacheKey>/<KeyFragment>

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

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

پیش فرض:

N/A

حضور:

اختیاری

نوع:

N/A

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

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

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

صفات

صفت تایپ کنید پیش فرض مورد نیاز توضیحات
رجوع کنید رشته خیر

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

عنصر <CacheKey>/<Prefix>

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

<Prefix>prefix_string</Prefix>

پیش فرض:

N/A

حضور:

اختیاری

نوع:

رشته

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

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

عنصر <ExcludeErrorResponse>

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

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

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

توجه: در نسخه بعدی (که مشخص می شود)، تنظیمات پیش فرض این عنصر به درست تغییر می کند. برای جزئیات بیشتر به یادداشت‌های انتشار 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>

پیش فرض:

N/A

حضور:

مورد نیاز

نوع:

N/A

عنصر <ExpirySettings> /<ExpiryDate>

تاریخ انقضای ورودی حافظه پنهان را مشخص می کند. از فرم mm-dd-yyyy استفاده کنید. در صورت وجود، خواهر و برادر این عنصر، <TimeoutInSeconds> ، <ExpiryDate> را لغو می کند.

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

پیش فرض:

N/A

حضور:

اختیاری

نوع:

رشته

صفات

<ExpiryDate ref="" />
صفت توضیحات پیش فرض حضور تایپ کنید
رجوع کنید

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

N/A اختیاری رشته

عنصر <ExpirySettings>/<TimeOfDay>

زمانی از روز که در آن ورودی حافظه پنهان باید منقضی شود. از فرم hh:mm:ss استفاده کنید. در صورت وجود، خواهر و برادر این عنصر، <TimeoutInSeconds> ، <TimeOfDay> را لغو می کند.

زمان روز را در قالب HH:mm:ss وارد کنید، جایی که HH نشان دهنده ساعت در ساعت 24 ساعته است. به عنوان مثال، 14:30:00 تا 2:30 بعد از ظهر.

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

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

پیش فرض:

N/A

حضور:

اختیاری

نوع:

رشته

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
رجوع کنید متغیر با مقدار زمان انقضا. N/A اختیاری رشته

عنصر <ExpirySettings>/<TimeoutInSec>

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