前面我們已經把Redis Lua相關的基礎都介紹過了,如果你可以編寫一些簡單的Lua腳本,恭喜你已經可以從Lua中學畢業了。
在大學課程中,我們主要學習Lua腳本調試和Redis中Lua執行原理兩部分內容兩部分。
Lua腳本調試
Redis從3.2版本開始支持Lua腳本調試,調試器的名字叫做LDB。它有一些重要的特性:
- 它使用的是伺服器-客戶端模式,所以是遠程調試。Redis伺服器就是調試伺服器,默認的客戶端是redis-cli。也可以開發遵循伺服器協議的其他客戶端。
- 默認情況下,每個debugging session都是一個新的session。也就是說在調試的過程中,伺服器不會被阻塞。仍然可以被其他客戶端使用或開啟新的session。同時也意味著在調試過程中所有的修改在結束時都會回滾。
- 如果需要,可以把debugging模式調成同步,這樣就可以保留對數據集的更改。在這種模式下,調試時伺服器會處於阻塞狀態。
- 支持步進式執行
- 支持靜態和動態斷點
- 支持從腳本中向調試控制檯列印調試日誌
- 檢查Lua變數
- 追蹤Redis命令的執行
- 很好的支持列印Redis和Lua的值
- 無限循環和長執行檢測,模擬斷點
Lua腳本調試實戰
在開始調試之前,首先編寫一個簡單的Lua腳本script.lua:
local src = KEYS[1]
local dst = KEYS[2]
local count = tonumber(ARGV[1])
while count > 0 do
local item = redis.call(rpop,src)
if item ~= false then
redis.call(lpush,dst,item)
end
count = count - 1
end
return redis.call(llen,dst)
這個腳本是把src中的元素依次插入到dst元素的頭部。
有了這個腳本之後我們就可以開始調試工作了。
我們可以使用redis-cli —eval
命令來運行這個腳本,而要調試的話,可以加上—ldb參數,因此我們先執行下面的命令:
redis-cli --ldb --eval script.lua foo bar , 10
頁面會出現一些幫助信息,並進入到調試模式