使用LPOP时如果客户端在redis服务器执行命令时断开连接,弹出的项目会发生什么情况?更具体地说,元素是否在未交付的情况下被丢弃,或者由于命令未成功而保留在内存中?感谢任何帮助/指点。 最佳答案 处理弹出的实际逻辑的代码部分忽略了客户端状态。Redis不会等待响应发送完成才能完成对命令的处理。这样等待会很慢,尤其是单线程。您可以查看处理BLPOP的代码部分,了解这是如何发生的://hereiswhereredisactuallypopsfromthelistrobj*value=listTypePop(o,where);serve
我正在尝试在Redis中构建FIFO队列,但我只是担心并发性。如果2个客户端尝试同时进行RPOP操作怎么办?如果RPOP/LPOP不是原子的,那么如何使用MULTI/EXEC实现原子性? 最佳答案 IsRedisLPOP/RPOPoperationatomic?是的,LPOP和RPOP都是原子的。Whatif2clientstrytodoRPOPoperationsimultaneously?如果LIST的大小等于或大于2,则两个客户端都会得到不同的项目。如果LIST只有一个项目,则只有一个客户端获取该项目,而另一个客户端得到空回复
有没有办法自动从列表中弹出一个项目并将其添加到集合中?我的案例场景是我有一个独特项目的“工作队列”列表,我想跟踪“进行中”集中正在处理的内容。如果我的工作进程在处理某个项目时崩溃,这也将允许“进行中”集中的项目重新排队。我希望它是原子的,这样从列表中弹出的任何内容都将始终在集合中。我只是不知道如何使用MULTI/EXEC执行此操作,即:redis>MULTIOKredis>LPOPworkqueue"foobar"redis>SADDinprog"foobar"redis>EXEC 最佳答案 为什么你希望你的“进行中”收藏是一个集合