使用一个命令弹出(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。这在生产环境中是个坏主意。
我在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。这在生产环境中是个坏主意。