Истечение срока действия и вытеснение в кэше роли Azure

Важно!

Корпорация Майкрософт рекомендует все новые разработки использовать кэш Redis для Azure. Текущая документация и рекомендации по выбору предложения кэша Azure см. в статье о том, какое предложение кэша Azure подходит для меня?

Microsoft Azure кэш не сохраняет кэшированные объекты в памяти безвозвратно. Помимо явного удаления из кэша с помощью метода Remove кэшированные объекты также могут истечь или вытеснили кластер кэша.

Окончание срока действия

Истечение срока действия кэша позволяет кластеру кэша автоматически удалять объекты кэша из кэша. При использовании методов Put или Add возможное значение ожидания объекта может быть настроено для определенного объекта кэша, которое будет определять, как долго он будет оставаться в кэше. Если значение ожидания объекта не предоставляется во время кэширования объекта, кэшированный объект использует срок действия по умолчанию.

При использовании кэширования на основе ролей у вас есть три варианта истечения срока действия:

Тип истечения срока действия Описание

None

Истечение срока действия отключено. Элементы остаются в кэше до тех пор, пока они не будут вытеснены или кластер кэша не перезапустится.

Absolute

Элементы оканчивают действовать в установленный период времени с момента их создания.

Скользящая

Элементы оканчивают действовать в установленный период времени с момента последнего доступа к ним. Каждый раз при доступе к объекту скользящее временное окно сбрасывается. Это позволяет дольше удерживать в кэше часто используемые элементы.

Примечание

Важно обратить внимание на поведение истечение срока Скользящая при использовании в сочетании с локальным кэшем. Если элемент прочитан из локального кэша, это не дает доступ к объекту в кластере кэша. Следовательно, возможна такая ситуация, при которой срок действия элемента истечет на сервере, даже если он был прочитан локально.

В общий кэш срок действия всегда является абсолютным, и невозможно задать время окончания срока действия по умолчанию. Срок действия элементов в общий кэш истекает через 48 часов. Однако можно использовать методы Put и Add , чтобы задать явное время окончания срока действия в коде. Обратите внимание, что поставщики ASP.NET автоматически используют эти перегрузки для явного задания времени ожидания состояний сеансов и кэша вывода. В любом случае, если размер кэша превышает пределы вашего предложения общий кэш, то наименее недавно использованные элементы в кэше вытеснили.

Когда объекты кэша закрываются для целей параллелизма, они не будут удалены из кэша, даже если они превысили срок действия. С момента их открытия они будут немедленно удалены из кэша в случае превышения срока действия.

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

Недействительность локального кэша

Существует два дополняющих типа недействительности локального кэша: недействительность, основанная на ожидании, и недействительность, основанная на уведомлении.

Совет

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

Недействительность, основанная на ожидании

После того, как объекты загружены в локальный кэш, они остаются там, пока не достигнут значения ожидания объекта, определенного в настройках конфигурации клиента кэша. После того как они достигнут данного значения ожидания, объекты становятся недействительными, следовательно, объект может быть обновлен из кластера кэша при следующем его запросе.

Недействительность, основанная на уведомлении

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

Примечание

Уведомления не поддерживаются в общий кэш.

При использовании уведомлений кэша приложение проверяет наличие новых уведомлений в кластере кэша с регулярным интервалом. Этот интервал, называемый интервалом опроса, по умолчанию составляет 300 секунд. Интервал опроса задается в секундах в параметрах конфигурации приложения. Обратите внимание на то, что даже при недействительности, основанной на уведомлении, таймауты все же применяются к элементам в локальном кэше. Это делает недействительность, основанную на уведомлении, комплиментарной к недействительности, основанной на ожидании.

Дополнительные сведения и примеры см. в разделе "Локальный кэш" в кэше In-Role Azure.

вытеснение

Для обеспечения доступности нужного объема памяти для кэша на каждом узле размещения кэша поддерживается политика извлечения дольше всего неиспользуемых элементов (LRU). Пороги используются для того, чтобы гарантировать, что память равномерно распределена по узлам размещения кэша в кластере. Порог определяется двумя факторами: количеством доступной физической памяти на каждой машине и процентом зарезервированной кэш-памяти на каждой машине.

Когда потребление памяти превышает допустимое пороговое значение, объекты удаляются из памяти независимо от того, истек ли срок их действия, чтобы устранить нехватку памяти. Последовательно кэшируемые объекты могут быть перенаправлены на другие машины в кластере кэша для поддержания оптимального распределения памяти.

Предупреждение

Если вы отключили вытеснение данных, вы подвергаетесь риску регулирования количества запросов. В этом случае объем памяти превысил пороговое значение, но нет возможности облегчить нехватку памяти. Клиенты, которые в данном состоянии пытаются добавить элементы в кэш, получают исключения, пока эта проблема не разрешится. Обратите внимание, что общий кэш не поддерживает отключение вытеснения в кэше.

Определение настроек истечения срока действия и удаления данных

Поведение истечения срока действия и удаления данных настраиваются на уровне именованного кэша в настройках конфигурации кластера.

Следующие методы позволят вам переопределить настройки по умолчанию, которые установлены в кэше:

  • Методы Add и Put предоставляют перегрузки, позволяющие указать значение времени ожидания истечения срока действия только для объекта, добавляемого в кэш.

  • Методы PutAndUnlock и Unlock предоставляют перегрузки, позволяющие продлить срок действия объекта после разблокировки.

  • Метод ResetObjectTimeout позволяет явно продлить время существования объекта, переопределяя параметры срока действия кэша.

Несмотря на настройки истечения срока действия или удаления данных, если кластер кэша перезапустился, все объекты в кэше очищаются. Ваш код приложения должен перезагрузить кэш из источника данных, если данные не были найдены в кэше. Это часто именуется шаблоном программирования отдельно от кэша.

См. также:

Основные понятия

Функции кэша роли для кэша Azure