簡介:Lua是一種由輕量級C語言編寫的腳本,跟數據的存儲過程有點類似,使用Lua腳本來執行Redis命令好處如下:
一次性發送多個命令,減少網絡開銷;
Redis會將整個腳本作為一個整體執行,不會被其他請求打斷,保持原子性;
對於復雜的組合命令,我們可以放在文件中,可以實現命令復用;
1. Redis中調用Lua腳本
A. eval script numkeys keys args
script:lua腳本;
numkeys:指定鍵名參數集keys的個數,如果沒有key的參數,就寫0;
keys:鍵名參數集,通過全局變量KEYS數組表示,起始下標為1;
args:鍵值參數集,通過全局變量ARGV數組表示,起始下標為1;
2. Lua腳本調用redis命令
redis.call:在腳本中調用Redis命令,遇到錯誤會直接返回;
redis.log(loglevel,message):記錄日志信息,日志級別為redis.LOG_DEBUG、redis.LOG_VERBOSE、redis.LOG_NOTICE、redis.LOG_WARNING;
3. 緩存Lua腳本
A. 緩存作用:在Lua腳本文件比較大的情況下,如果每次調用腳本都需要把整個腳本傳給Redis服務端,會產生比較大的網絡開銷,因此需要Redis緩存Lua腳本並生成SHA1摘要碼,后面直接通過摘要碼來執行Lua腳本;
B. 生成摘要碼:script load "......";
C. 通過摘要碼執行緩存的腳本:evalsha "....." 0;
4. 參數
A. 腳本超時時間:lua-time-limit 5000;
可參考:Lua腳本入門