我正在尝试在Redis中构建FIFO队列,但我只是担心并发性。如果2个客户端同时尝试进行RPOP操作怎么办?
如果RPOP / LPOP不是原子的,那么如何使用MULTI / EXEC实现原子性?
答案 0 :(得分:3)
Redis LPOP / RPOP操作是原子的吗?
是的,LPOP
和RPOP
都是原子的。
如果2个客户端同时尝试进行RPOP操作怎么办?
如果LIST
的大小等于或大于2
,则两个客户端都会获得不同的项目。如果LIST
只有一个项目,则只有一个客户端获取该项目,而另一个客户端获得空回复。如果LIST
为空,则两个客户端都会收到空回复。
另一种解决方案
您还可以使用BLPOP
或BRPOP
来实施FIFO
。这两个命令也是原子的,将阻塞空LIST
。有关详细信息,请参阅文档。