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


Управление памятью

В этой статье описаны рекомендации по управлению памятью в кэше Azure для Redis.

Выбор правильной политики вытеснения

Выберите политику вытеснения, которая работает для приложения. Политика по умолчанию для Кэша Azure для Redis — это volatile-lru, что означает: только ключи, имеющие установленное время жизни (TTL), заданное с помощью команды, например, EXPIRE, имеют право на вытеснение. Если ключи не имеют значения TTL, система не вытесняет никакие ключи. Если вы хотите, чтобы система разрешала вытеснение любого ключа при нехватке памяти, используйте allkeys-lru политику.

Установка даты окончания срока действия ключей

Вытеснение из-за нехватки памяти может привести к большей нагрузке на ваш сервер. Задайте значение истечения срока действия ключей, чтобы удалить ключи заранее, а не ожидать, пока не будет давление на память. Дополнительные сведения см. в документации по командам Redis EXPIRE и EXPIREAT.

Минимизация фрагментации памяти

Большие значения ключей могут привести к фрагментации памяти при вытеснении и вызвать высокое использование памяти и нагрузку на сервер.

Наблюдение за использованием памяти

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

Настройте параметр maxmemory-reserved

Настройте параметры maxmemory-reserved , чтобы максимально повысить скорость реагирования системы. Достаточно параметров резервирования особенно важно для рабочих нагрузок с высокой нагрузкой на запись или при хранении значений 100 КБ или более в кэше.

  • Этот параметр maxmemory-reserved настраивает объем памяти в МБ, зарезервированный на экземпляр в кластере, для некэшированных операций, таких как репликация при отказе. Установка этого значения обеспечивает более согласованную работу сервера Redis при изменении нагрузки.

  • Параметр maxfragmentationmemory-reserved настраивает объем памяти в МБ на экземпляр в кластере, зарезервированный для учета фрагментации памяти. При установке этого значения сервер Redis будет более согласованным в моменты, когда кэш заполнен или почти заполнен, а коэффициент фрагментации высок.

Если память зарезервирована для этих операций, она недоступна для хранения кэшированных данных. По умолчанию при создании кэша примерно 10% доступной памяти зарезервировано для maxmemory-reserved, и еще 10% зарезервировано для maxfragmentationmemory-reserved. Вы можете увеличить зарезервированные суммы, если у вас есть нагрузки с интенсивными записями.

Допустимые диапазоны для maxmemory-reserved и для maxfragmentationmemory-reserved составляют от 10%до 60% для maxmemory. Если вы попытаетесь установить эти значения ниже 10 % или выше 60 %, они будут пересмотрены и возвращены к значениям минимум 10 % и максимум 60 %.

При масштабировании кэша параметры maxmemory-reserved и maxfragmentationmemory-reserved автоматически масштабируются пропорционально размеру кэша. Например, если maxmemory-reserved задано значение 3 ГБ в кэше размером 6 ГБ, и вы масштабируете его до 12 ГБ, параметр автоматически обновляется до 6 ГБ во время масштабирования. При уменьшении масштаба происходит обратный процесс.

Рассмотрите, как изменение значения резервирования памяти maxmemory-reserved или maxfragmentationmemory-reserved может повлиять на кэш, в котором уже хранится большой объем данных. Например, если у вас есть кэш объемом 53 ГБ, а зарезервированные значения установлены на минимум 10%, максимальный объем доступной памяти для системы составляет примерно 42 ГБ. Если текущее значение used_memory или used_memory_rss превышает 42 ГБ, система должна вытеснить данные до тех пор, пока и used_memory, и used_memory_rss не станут меньше 42 ГБ.

Вытеснение может увеличить нагрузку на сервер и фрагментацию памяти. Дополнительные сведения о метриках кэша, таких как used_memory и used_memory_rss, см. в разделе Создание собственных метрик.

Примечание.

При программном масштабировании кэша с помощью Azure PowerShell, Azure CLI или REST API все включенные maxmemory-reserved или maxfragmentationmemory-reserved параметры игнорируются в рамках запроса на обновление. Учитывается только изменение масштабирования. После завершения операции масштабирования можно обновить параметры памяти.