Я столкнулся с исключением, касающимся моей системы 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 поступил на сервер, который выдал элемент (так что он больше не присутствует в списке)... но ответ был потерян при возврате к клиенту (и так же к элементу)
если что-то подобное произошло, есть ли механизм для восстановления пропущенного элемента после исключения тайм-аута?
Спасибо