我在处理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的请求到达了弹出项目的服务器(所以它不再存在于列表中)...但是响应丢失回到了客户端(因此项目)< / p>
如果发生类似情况,是否有任何机制可以在超时异常后恢复丢失的项目?
谢谢