Redis中执行Lua脚本
语法:
语法: eval script numkeys keys args
参数: eval — redis提供解析lua脚本的命令
script — lua脚本
numkeys — 指定键名参数集(keys)的个数
keys — 键名参数集,通过全局变量KEYS数组表示,起始下标为1
args — 键值参数集,通过全局变量ARGV数组表示,起始下标为1
案例:
# 登录redis后设置一个值
set kojon 10
编写lua脚本
通过key的值乘以一个值
KEYS[1]:参数1,表示key
KEYS[2]:参数2,表示倍数
local curval =redis.call("get",KEYS[1])
if curval==false then
curval=0
else
curval=tonumber(curval)
end
curval=curval * tonumber(KEYS[2])
redis.call("set",KEYS[1],curval)
return curval
执行
# 语法 redis-cli -a auth --eval lua文件 参数1 参数2
# 没有密码的可以不用-a auth
/usr/local/redis/bin/redis-cli -a KS6IxTDg7Q1gqhnWec9s --eval multiply.lua kojon 2
结果
shell /usr/local/redis/bin/redis-cli -a KS6IxTDg7Q1gqhnWec9s --eval jisuan.lua kojon 2
(integer) 20
描述: EVAL命令的语义要求字面量不要直接写在lua脚本中,推荐使用变量来定义lua脚本,并将字面量放在键名参数集keys和键值参数集args中,通过全局变量KEYS和ARGV来获取,这样做的好处是可缓存!在lua脚本中,可以使用两个函数来执行redis命令,分别是:redis.call()和redis.pcall()