我正在尝试在Redis中构建FIFO队列,但我担心并发问题。如果两个客户端同时尝试执行RPOP操作会怎么样?
如果RPOP/LPOP不是原子性的,那如何使用MULTI/EXEC实现原子性操作?
我正在尝试在Redis中构建FIFO队列,但我担心并发问题。如果两个客户端同时尝试执行RPOP操作会怎么样?
如果RPOP/LPOP不是原子性的,那如何使用MULTI/EXEC实现原子性操作?
Redis的LPOP / RPOP操作是否是原子性的?
是的,LPOP
和RPOP
都是原子性的。
如果两个客户端同时尝试进行RPOP操作会怎样?
如果LIST
的大小等于或大于2
,则两个客户端会得到不同的项。如果LIST
只有一项,则只有一个客户端会得到该项,而另一个客户端会得到null回复。如果LIST
为空,则两个客户端均得到null回复。
另一种解决方案
您还可以使用BLPOP
或BRPOP
来实现FIFO
。这两个命令也是原子性的,并且会在空的LIST
上阻塞。有关详细信息,请参见文档。