redis調用lua說明文檔

redis調用lua腳本

在實際開發中,可以通過pipeline將多個命令批量傳輸給redis執行,減少網絡開銷;但有時候,由于執行的命令可能依賴前一命令的結果,在這種情況下,pipeline就不能滿足我們的要求;
幸運的是redis中內置了對lua的支持,可以通過lua腳本完成此類工作;

調用方式

1. redis-cli --eval script key_count key1,key2...arg1 argn
2. redis-cli --evalsha scriptsha  key_count key1,key2...arg1 argn
3. redis-cli eval "$(cat script.lua)" key_count key1,key2...arg1 arg2

參數說明

  • key_count表示key參數的個數,在lua腳本中,可以通過KEYS+下標的方式引用;
  • argn表示參數,在lua腳本中可以通過ARGV+下標的方式引用;

例子

1.lua

local result=0
    local id= redis.call('get',KEYS[1])
if id then
    result= redis.call('sismember',id,KEYS[2])
end
 
if result==1 then
    redis.call('expire',KEYS[1],ARGV[1])
end
  
return result
  redis-cli  --eval 1.lua 2 user1 user:list 1800
  或
  redis-cli  eval "$(1.lua)" 2 user1 user:list 1800
  或
  redis-cli  script load "$(cat 1.lua)"
  redis-cli  evalsha 2cfe726fe60678e8ed4d689a3e98727d1e1e2339 1 test 1

注:2cfe726fe60678e8ed4d689a3e98727d1e1e2339是script load產生的sha值;如果redis需要認證,可以通過-a參數

腳本調試

redis3.2之后內置了debug引擎,可以通過--ldb選項進入debug模式

redis-cli --ldb evalsha 2cfe726fe60678e8ed4d689a3e98727d1e1e2339 1 test 1
Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容