redis-运行lua脚本的介绍

在redis中使用lua

eval

eval 脚本内容 key个数  key列表 参数列表

结果如下:
在这里插入图片描述

redis-cli --eval

如果lua脚本较长,可以使用redis-cli --eval的方式:
新建lua.lua文件,在文件中输入:return KEYS[1]..ARGV[1]
在linux中执行:
redis-cli --eval 文件路径 keys , argvs
在这里插入图片描述
key和参数间需要使用逗号(,)隔开,并且需要占用空格

eval命令和- -eval参数的方式本质上是一样的,客户端将需要执行的lua脚本作为字符串发送给服务端,服务端将执行结果返回给客户端。

evalsha

使用evalsha执行lua脚本,首先需要将lua脚本加载到服务端(会常驻内存中),服务端会返回该脚本的SHA1值,evalsha命令使用SHA1作为参数直接可以执行对应脚本,避免每次发送Lua脚本的开销。

加载脚本

在linux中执行:redis-cli script load "$(cat 文件路径)"
在这里插入图片描述

执行脚本

在redis客户端执行:evalsha sha1值 key数量 key列表 参数列表
在这里插入图片描述

redis管理脚本

  • script load
    此命令用于将Lua脚本加载到Redis内存中
  • scripts exists sha1 [sha1 …]
    此命令用于判断sha1是否已经加载到Redis内存中,返回结果代表sha1[sha1…]被加载到Redis内存的个数
  • script flush
    此命令用于清除Redis内存已经加载的所有Lua脚本
  • script kill
    此命令用于杀掉正在执行的Lua脚本。 如果Lua脚本比较耗时, 甚至Lua脚本存在问题, 那么此时Lua脚本的执行会阻塞Redis, 直到脚本执行完毕或者外部进行干预将其结束。
    如果当前Lua脚本正在执行写操作, 那么script kill将不会生效。

Lua的Redis API

Lua可以使用redis.call函数实现对Redis的访问:

--set("db","redis")
redis.call("set", "db", "redis") 
--get("db")
redis.call("get", "db")

除此之外Lua还可以使用redis.pcall函数实现对Redis的调用, redis.call和redis.pcall的不同在于, 如果redis.call执行失败, 那么脚本执行结束会直接返回错误, 而redis.pcall会忽略错误继续执行脚本, 所以在实际开发中要根据具体的应用场景进行函数的选择。

参考:
Redis开发与运维

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值