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

Политика вытеснения

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

Срок действия ключей

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

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

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

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

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

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

Настройте параметр maxmemory-reserved, чтобы повысить скорость отклика системы:

  • Достаточный параметр резервирования особенно важен для рабочих нагрузок с большим объемом записи или если вы храните в кэше значения размером 100 КБ или более. По умолчанию при создании кэша примерно 10% доступной памяти резервируется для maxmemory-reserved. Ещё 10% резервируется для maxfragmentationmemory-reserved. Если у вас есть нагрузки с интенсивной записью, вы можете увеличить резервируемый объем.

  • Параметр maxmemory-reserved определяет объем памяти в мегабайтах на экземпляр в кластере, зарезервированный для операций, не связанных с кэшем. Например, для репликации при отработке отказа. Установка этого значения обеспечивает более согласованную работу сервера Redis при изменении нагрузки. Это значение должно быть больше для рабочих нагрузок, которые записывают большие объемы данных. При резервировании памяти для таких операций она недоступна для хранения кэшированных данных. Допустимый диапазон для maxmemory-reserved — 10–60% от maxmemory. Если вы попытаетесь установить эти значения ниже 10% или выше 60%, они будут пересмотрены и возвращены к значениям минимум 10% и максимум 60%. Значения отображаются в мегабайтах.

  • Параметр maxfragmentationmemory-reserved настраивает объем памяти в МБ на экземпляр в кластере, который зарезервирован для обеспечения фрагментации памяти. При установке этого значения сервер Redis будет более согласованным в моменты, когда кэш заполнен или почти заполнен, а коэффициент фрагментации высок. При резервировании памяти для таких операций она недоступна для хранения кэшированных данных. Допустимый диапазон для maxfragmentationmemory-reserved — 10–60% от maxmemory. Если вы попытаетесь установить эти значения ниже 10% или выше 60%, они будут пересмотрены и возвращены к значениям минимум 10% и максимум 60%. Значения отображаются в мегабайтах.

  • При выборе нового значения резервирования памяти (maxmemory-reserved или maxfragmentationmemory-reserved) следует учитывать, как это изменение может повлиять на работающий кэш с большими объемами данных. Например, если у вас есть кэш размером 53 ГБ с 49 ГБ данных, а затем вы измените значение резервирования на 8 ГБ, максимальный объем доступной памяти для системы упадет до 45 ГБ. Если текущие значения used_memory или used_memory_rss выше, чем новое ограничение в 45 ГБ, то системе придется вытеснять данные до тех пор, пока оба значения used_memory и used_memory_rss не станут меньше 45 ГБ. Вытеснение может увеличить нагрузку на сервер и фрагментацию памяти. Дополнительные сведения о метриках кэша, таких как used_memory и used_memory_rss, см. в разделе Создание собственных метрик.

Примечание

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

Дальнейшие действия