Redis的LPOP/RPOP操作是否具有原子性?

13

我正在尝试在Redis中构建FIFO队列,但我担心并发问题。如果两个客户端同时尝试执行RPOP操作会怎么样?

如果RPOP/LPOP不是原子性的,那如何使用MULTI/EXEC实现原子性操作?

1个回答

14

Redis的LPOP / RPOP操作是否是原子性的?

是的,LPOPRPOP都是原子性的。

如果两个客户端同时尝试进行RPOP操作会怎样?

如果LIST的大小等于或大于2,则两个客户端会得到不同的项。如果LIST只有一项,则只有一个客户端会得到该项,而另一个客户端会得到null回复。如果LIST为空,则两个客户端均得到null回复。

另一种解决方案

您还可以使用BLPOPBRPOP来实现FIFO。这两个命令也是原子性的,并且会在空的LIST上阻塞。有关详细信息,请参见文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接