将队列数据移动到另一个队列的头部

时间:2016-01-21 18:23:32

标签: redis

我想将队列清空到另一个队列。我假设RPOPLPUSH将成为我的工具,运行它直到排队耗尽。我想在原子步骤中做到这一点,所以我认为Lua脚本将成为我的工具。

不幸的是我写的脚本不起作用。相反,它看起来停留在无限循环中,并在超时后触发BUSY错误。这是代码:

local x
if KEYS[1] == KEYS[2] then
    return
end
repeat
    x = redis.call('rpoplpush', KEYS[1], KEYS[2])
until not x

这是我用来执行它的Python客户端代码:

script = """
...same script as above...
"""
redis.eval(script, 2, 'source_queue', 'dest_queue')

1 个答案:

答案 0 :(得分:1)

until中的条件错误。如果rpoplpush在空源列表上执行,则返回nil并且until not x产生无限循环。试试这个:

if KEYS[1] == KEYS[2] then
    return
end
local x
repeat
    x = redis.call('rpoplpush', KEYS[1], KEYS[2])
until x ~= nil