Redis LPOP / RPOP操作是原子的吗?

use*_*063 5 redis

我正在尝试在Redis中建立FIFO队列,但是我只是担心并发性。如果2个客户端尝试同时执行RPOP操作怎么办?

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

for*_*ack 8

Redis LPOP / RPOP 操作是原子的吗?

是的,无论是LPOPRPOP是原子。

如果 2 个客户端尝试同时进行 RPOP 操作怎么办?

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

另一种解决方案

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