Redis RPOP и LPOP во время исключения тайм-аута подключения Redis - PullRequest
0 голосов
/ 13 ноября 2018

Я столкнулся с исключением, касающимся моей системы REDIS.

По сути, у меня есть список, хранящийся на Redis, и 2 клиента, извлекающие из него элементы с помощью RPOP.То, что произошло, можно суммировать следующим образом:

0 -LIST LENGTH = 9
   CLIENT1.RPop() [got item]       CLIENT2.RPop() [got item]
1 -LIST LENGTH = 7
   CLIENT1.RPop() [got item]       CLIENT2.RPop() [got item]
2 -LIST LENGTH = 5
   CLIENT1.RPop() [got item]       CLIENT2.RPop()[nil] RedisTimeout
3 -LIST LENGTH = 3
   CLIENT1.RPop() [got item]       CLIENT2.RPop() [got item]

Мой код не зарегистрировал никакого другого конкретного исключения после шага 2. Но когда клиенты запустили новый «цикл прерывания», пропущенный элемент в тайм-ауте был похожисчезли.

Итак, мои вопросы:

  • Возможно ли, что запрос client2 поступил на сервер, который выдал элемент (так что он больше не присутствует в списке)... но ответ был потерян при возврате к клиенту (и так же к элементу)

  • если что-то подобное произошло, есть ли механизм для восстановления пропущенного элемента после исключения тайм-аута?

Спасибо

...