我想將一個隊列清空到另一個隊列中。我認爲RPOPLPUSH
將是我的工具,運行它直到隊列耗盡。我想在原子步驟中做到這一點,所以我認爲Lua腳本將成爲我的工具。將隊列數據移動到另一個隊列的頭部
不幸的是我寫的腳本沒有工作。相反,它看起來陷入了無限循環。這是代碼:
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')
腳本沒有錯 - 它在我的本地Redis上運行完全正常。一個無限循環會在定義的'lua-time-limit'之後觸發來自Redis的BUSY響應 - 是你看到的行爲? –
@ItamarHaber是的,我可以證實,這就是行爲。無論source_queue是否有數據或是空的 –