Поделиться через


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

ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление 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>

Атрибуты

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

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

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

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

Элементы

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

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

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

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

Примеры

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

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

<!-- 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 (Переменная контекста).

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