Redis MAXMEMORY управление волатильным-lru vs allkeys-lru - PullRequest
2 голосов
/ 07 января 2020

Я использую redis как хранилище данных, а не как кеш, но установлен предел maxmemory. В моем понимании maxmemory указывает ОЗУ, которую может использовать redis, если он не перенесет данные обратно на диск после того, как будет достигнут предел памяти , У меня есть смесь ключей, в то время как у некоторых из них установлен срок действия, а у других нет, я пробовал и volatile-lru, и allkeys-lru, как указано в документации, и удаляются старые ключи на основе свойства. Какую конфигурацию я должен использовать, чтобы избежать потери данных? Должен ли я установить срок действия всех ключей и использовать volatile-lru? Чего мне не хватает?

Ответы [ 3 ]

1 голос
/ 08 января 2020

Замена памяти на диск (виртуальная память) устарела / удалена в Redis 2.4 / 2.6. Скорее всего, вы не используете такую ​​старую версию.

Вы управляете тем, что делает Redis при исчерпании памяти с помощью maxmemory и maxmemory-policy. Обе настройки в redis.conf. Взгляните . Перестановка памяти на диск не подходит в последних версиях Redis.

Если Redis не может удалить ключи в соответствии с политикой или если для политики установлено значение noeviction ', Redis начнет отвечать с ошибками на команды, которые будут использовать больше памяти, такие как SET, LPU SH и т. Д., И продолжит отвечать на команды только для чтения, такие как GET.

Если достигнуто maxmemory, вы потеряете данные только в том случае, если в политике выселения, установленной в maxmemory-policy, указано, что Redis выселяет некоторые ключи и как выбирать эти ключи (volatile или all, lfu / lru / ttl / random). В противном случае Redis начинает отклонять команды записи, чтобы сохранить данные, уже находящиеся в памяти. Команды чтения продолжают обслуживаться.

Вы можете запустить Redis без настройки maxmemory (по умолчанию), поэтому он будет продолжать использовать память до тех пор, пока память ОС не будет исчерпана.

Если ваша операционная система В системе включена виртуальная память, а настройка maxmemory позволяет Redis go превышать доступную физическую память, после чего ваша ОС (не Redis) начинает выгружать память на диск. Тогда можно ожидать снижения производительности.

0 голосов
/ 10 января 2020

Не устанавливайте этот параметр, если вы используете redis в качестве хранилища данных, он используется для сценария кэширования.

0 голосов
/ 07 января 2020

В общем, как правило:

  1. Используйте политику allkeys-lru , когда ожидаете степенного распределения популярности ваших запросов, то есть вы ожидаете, что к подмножеству элементов будут обращаться гораздо чаще, чем к остальным. Это хороший выбор, если вы не уверены .
  2. Используйте случайные allkeys, если у вас есть циклический доступ, где все ключи сканируются непрерывно, или когда вы ожидаете, что распределение будет равномерным (все элементы, вероятно, доступны с одинаковой вероятностью).
  3. Используйте volatile-ttl, если вы хотите, чтобы Redis давал подсказки о том, что является хорошим кандидатом на срок действия, используя различные значения TTL при создании объектов кэша.
  4. * 1015 Политики * volatile-lru и volatile-random в основном полезны, когда вы хотите использовать один экземпляр как для кэширования, так и для набора постоянных ключей . Однако для решения такой проблемы обычно лучше запустить два экземпляра Redis.

Как указано в документации

Использование Redis в качестве кэша LRU

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...