Получение из кэша

ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API

Политика cache-lookup используется для поиска в кэше и возврата допустимого кэшированного ответа при его наличии. Эту политику можно применять в тех случаях, когда содержимое ответа остается неизменным в течение определенного интервала времени. Кэширование ответов уменьшает требования к пропускной способности и вычислительной мощности, накладываемые на внутренний веб-сервер, а также снижает время задержки для потребителей API.

Примечание.

Одновременно с этой политикой должна быть определена соответствующая политика сохранения в кэш.

Внимание

Встроенный кэш является непостоянным и совместно используется всеми единицами одного региона в той же службе Управления API.

Примечание.

Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Чтобы помочь вам настроить эту политику, портал предоставляет интерактивный редактор на основе форм. Узнайте, как устанавливать или изменять политики службы управления API.

Правило политики

<cache-lookup vary-by-developer="true | false" vary-by-developer-groups="true | false" caching-type="prefer-external | external | internal" downstream-caching-type="none | private | public" must-revalidate="true | false" allow-private-response-caching="@(expression to evaluate)">
  <vary-by-header>Accept</vary-by-header>
  <!-- should be present in most cases -->
  <vary-by-header>Accept-Charset</vary-by-header>
  <!-- should be present in most cases -->
  <vary-by-header>Authorization</vary-by-header>
  <!-- should be present when allow-private-response-caching is "true"-->
  <vary-by-header>header name</vary-by-header>
  <!-- optional, can be repeated -->
  <vary-by-query-parameter>parameter name</vary-by-query-parameter>
  <!-- optional, can be repeated -->
</cache-lookup>

Атрибуты

Атрибут Описание Обязательное поле По умолчанию.
allow-private-response-caching Если задано значение true, разрешается кэширование запросов, содержащих заголовок авторизации. Допустимы выражения политики. нет false
тип кэширования Выберите одно из следующих значений атрибута:
- internalдля использования встроенного кэша Управление API,
- external для использования внешнего кэша, как описано в разделе "Использование внешнего кэша, совместимого с Redis" в службе управления API Azure,
- prefer-external — использование внешнего кэша, если он настроен. В противном случае используется внутренний кэш.

Выражения политики не допускаются.
нет prefer-external
подчиненный тип кэширования Для этого атрибута следует указать одно из таких значений:

- none — нисходящее кэширование не разрешено;
- private — разрешено нисходящее частное кэширование;
- public — разрешено частное и совместно используемое нисходящее кэширование.

Допустимы выражения политики.
нет ничего
необходимо повторно проверять Если включено нисходящее кэширование, этот атрибут включает или отключает директиву управления кэшем must-revalidate в ответах шлюза. Допустимы выражения политики. нет true
разработчик с различными разными разными способами Задайте значение true, чтобы кэшировать ответы по учетной записи разработчика, которой принадлежит ключ подписки, входящий в запрос. Допустимы выражения политики. Да false
различные группы разработчиков Установите значение true, если нужно кэшировать ответы в зависимости от группы пользователя. Допустимы выражения политики. Да false

Элементы

Имя Описание Обязательное поле
разными заголовками Добавьте один или несколько этих элементов, чтобы начать кэширование ответов на значение указанного заголовка, например Accept, , Accept-CharsetAccept-EncodingAccept-LanguageAuthorizationExpectFromHost. If-Match нет
параметр vary-by-query Добавьте один или несколько этих элементов, чтобы начать кэширование ответов на значение указанных параметров запроса. Введите один или несколько параметров. В качестве разделителя используйте точку с запятой. нет

Использование

Примечания об использовании

  • Управление API выполняет поиск кэша только для HTTP-запросов GET.
  • При использовании vary-by-query-parameter может потребоваться объявить параметры в шаблоне перезаписи URI или задать для атрибута copy-unmatched-params значение false. Деактивируя этот флаг, параметры, которые не объявлены, отправляются в серверную часть.
  • Эту политику можно использовать только один раз в разделе политики.
  • Эта политика не поддерживается внутри фрагмента политики.
  • Мы рекомендуем настроить политику ограничения скорости (или политику ограничения скорости по ключу ) сразу после поиска кэша. Это помогает сохранить серверную службу от перегрузки, если кэш недоступен.

Примеры

Пример с соответствующей политикой хранилища кэша

В этом примере показано, как использовать cache-store политику вместе с политикой cache-lookup для кэширования ответов в встроенном кэше управления API.

Примечание.

Добавьте политику ограничения скорости (или политику ограничения скорости по ключу ) после поиска кэша, чтобы ограничить количество вызовов и предотвратить перегрузку серверной службы в случае, если кэш недоступен.

<policies>
    <inbound>
        <base />
        <cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="none" must-revalidate="true" caching-type="internal" >
            <vary-by-query-parameter>version</vary-by-query-parameter>
        </cache-lookup>
        <rate-limit calls="10" renewal-period="60" />
    </inbound>
    <outbound>
        <cache-store duration="seconds" />
        <base />
    </outbound>
</policies>

Пример с использованием выражений политики

В этом примере показано, как настроить в службе управления API период хранения ответов в кэше, соответствующий длительности кэширования ответа в серверной службе, которая задается директивой Cache-Control.

<!-- The following cache policy snippets demonstrate how to control API Management response cache duration with Cache-Control headers sent by the backend service. -->

<!-- Copy this snippet into the inbound section -->
<cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="public" must-revalidate="true" >
  <vary-by-header>Accept</vary-by-header>
  <vary-by-header>Accept-Charset</vary-by-header>
</cache-lookup>
 <rate-limit calls="10" renewal-period="60" />

<!-- Copy this snippet into the outbound section. Note that cache duration is set to the max-age value provided in the Cache-Control header received from the backend service or to the default value of 5 min if none is found  -->
<cache-store duration="@{
    var header = context.Response.Headers.GetValueOrDefault("Cache-Control","");        
    var maxAge = Regex.Match(header, "@(max-age=(?<maxAge>\\d+))").Groups["maxAge"]?.Value;
    return (!string.IsNullOrEmpty(maxAge))?int.Parse(maxAge):300; }" />

Чтобы узнать больше, см. статью API Management policy expressions (Выражения политики управления API) и раздел Context variable (Переменная контекста).

Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.