使用一个命令弹出(LPOP,RPOP)多个键

Pop (LPOP, RPOP) multiple keys with one command

我在Redis里面有多个小队列,我想在固定的时间轮询它们。目前我在 Redis 中有多个键,每个键都存储一个字符串列表。

有没有办法运行同时对多个键进行弹出操作(LPOP、RPOP)?

Let's suppose that have 3 keys:
key1 -> ["a1","b1","c1"]
key2 -> ["a2","b2","c2"]
key3 -> ["a3","b3","c3"]

我可以 运行 一个 RPOP 操作(或类似的操作)以弹出“c1”、“c2”和“c3”吗?


如果可能的话,我可以 运行 相同的命令而不指定键吗?喜欢 运行 RPOP 存储在 Redis 中的所有键。

Can I run an RPOP operation (or something similar) in such a way that I'll pop "c1","c2" and "c3".

您可以使用Lua脚本来实现目标:

eval 'local items = {}; for i, k in ipairs(KEYS) do items[#items+1] = redis.call("lpop", k) end; return items' 2 key1 key2

事实上,有用于从多个键弹出项目的内置命令,但是这些命令仅来自第一个 non-empty 列表的 return 个项目。如果没问题,你可以看一下:BLPOP, BRPOP, LMPOP(这是Redis 7.0.0以后的新命令)

can I run the same command without specifying the keys? like to run RPOP for all the keys that are stored in Redis.

您可以修改上面的Lua脚本来达到目的。但是,不建议这样做。因为迭代所有键可能会阻塞 Redis。这在生产环境中是个坏主意。