从Redis FIFO队列中原子地弹出多个值

eimct9ow  于 2023-10-15  发布在  Redis
关注(0)|答案(3)|浏览(110)

我已经在Redis中使用RPUSH/LPUSH和RPOP/LPOP为列表设置了一个先进先出(FIFO)队列,我如何从队列中同时自动弹出多个项目?如果LIST和上面提到的命令不支持它,我应该使用什么?

vshtjzan

vshtjzan1#

没有执行多个pop的命令,但是您可以将这些命令 Package 在transaction中或Lua script中。

qhhrdooz

qhhrdooz2#

Redis transactions保证是原子的,因此可以首先使用LRANGE获取项目,然后使用LTRIM删除它们:

> RPUSH l 1 2 3 4 5
LRANGE mylist 0 -1
> MULTI
OK
> LRANGE l 0 1
QUEUED
> LTRIM l 2 -1
QUEUED
> EXEC
1) 1) "1"
   2) "2"
2) OK
> LRANGE l 0 -1
1) "3"
2) "4"
3) "5"
8fsztsew

8fsztsew3#

从6.2.0开始,LPOPRPOP现在支持count参数。

相关问题