Список Redis очищается без какой-либо причины? - PullRequest
1 голос
/ 11 января 2020

Я использую список redis, подобный этому, в python:

listitem = r.rpoplpush('mylist','mylist')

Странно, список пустует случайным образом - например, он будет работать без опустошения в течение месяца, а затем один штраф день опустошен? Что мне здесь не хватает? В моем сценарии нет другого утверждения, которое каким-либо образом затрагивает сценарий.

1 Ответ

2 голосов
/ 11 января 2020

В Redis нет такой вещи, как пустой список, если список полностью обрабатывается RPOP, ключ удаляется.

Итак, должно произойти одно из следующих действий:

  1. Список mylist очищается (LPOP, RPOP, LREM, LTRIM и т. Д. c) до тех пор, пока он не станет пустым.
  2. Ключ mylist удаляется (DEL, UNLINK, et c)
  3. Срок действия ключа mylist истек (EXPIRE, EXPIREAT, et c)
  4. Ключ выселяется
  5. Потеря данных происходит

Если redis-клиент не касается клавиши (1-3), то это должно быть 4 или 5.

Проверьте, есть ли у вас политика выселения установлен на вашем сервере с CONFIG GET maxmemory-policy.

Потеря данных может происходить, если у вас нет persistence и ваш сервер перезагружен. Или если вы используете более одного экземпляра (кластер или часовой) и что-то не так. Вы можете использовать команду INFO, чтобы увидеть:

  • Раздел сервера: redis_mode и uptime_in_days.
  • Раздел устойчивости: актуально, если время безотказной работы предполагает перезапуск сервера к моменту времени Вы потеряли ключ.
  • Разделы памяти и статистики: maxmemory_policy и evicted_keys сообщат нам, применяется ли политика
  • Разделы репликации и кластера: если мы до сих пор не знаем, начать расследование этого места.
...