redis: использовать элементы из zset из нескольких экземпляров сервиса - PullRequest
0 голосов
/ 26 марта 2020

У меня есть zset на моем redis, заполненном несколькими элементами.

С другой стороны, у меня есть несколько экземпляров службы , которым нужно "потреблять" эти элементы.

Когда я говорю «потреблять», я имею в виду каждый экземпляр:

  1. Получить первый элемент из zset
  2. Я обрабатываю его
  3. Если все было FINE , удалите его из zset

Проблемы здесь:

  • два экземпляра могут обработать один и тот же элемент дважды из-за условий гонки.

С другой стороны, я мог бы вытолкнуть первый элемент:

  1. Вытащить мне первый элемент из zset
  2. Я обработал его
  3. Если что-то было НЕПРАВИЛЬНО , pu sh это снова

Проблемы здесь:

  • Если процесс останавливается на шаге 2., элемент теряется навсегда, так как он не добавляется в Зсет снова.

Есть идеи?

1 Ответ

0 голосов
/ 26 марта 2020

у вас есть несколько вариантов

  • сделайте это сами, тогда вам нужно управлять состоянием заданий в zset
    • состояниях: активно / не удалось / завершено ...
    • при сбое => отправить событие ошибки в pu sh обратно в очередь
    • при завершении => событие завершения события, чтобы мы могли безопасно удалить его из очереди
    • повторить попытку? задержка повтора?
    • длительность блокировки?
    • et c ...
  • ИЛИ если вы хотите использовать redis? найти очередь lib, построенную поверх Redis. Эти виды библиотек могут выполнить все вышеперечисленное для вас и лучше протестировать.
  • ИЛИ, если вы используете последнюю версию Redis, вы можете захотеть взглянуть на диск (https://github.com/antirez/disque-module). Этот модуль от самого автора redis.
  • ИЛИ используйте другое правильное решение для очереди
...