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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容