Redis使用lua脚本
if redis.call('EXISTS', KEYS[1]) == 1 then
redis.call('INCR', KEYS[1])
else
redis.call('SET', KEYS[1], 1)
redis.call('EXPIRE', KEYS[1], ARGV[1])
end
return redis.call('GET', KEYS[1])
在lua脚本里面调用redis命令就是使用redis.call('INCR', KEYS[1])
,第一个参数是redis的命令,后面的参数是命令后面的参数值。
redis里面的命令是这样
127.0.0.1:6379[11]> set age 12
OK
127.0.0.1:6379[11]>
那么在lua脚本里面就是这样写,后面的0表示要操作的KEY的个数,关于redis使用lua脚本怎么传参数可以看上面的那个连接。
127.0.0.1:6379[11]> EVAL "return redis.call('SET', 'age',18)" 0
OK
127.0.0.1:6379[11]> get age
"18"
127.0.0.1:6379[11]> EVAL "if redis.call('EXISTS',KEYS[1]) == 1 then redis.call('INCR',KEYS[1]) else redis.call('TTL',KEYS[1],ARGV[1]) end return redis.call('GET',KEYS[1])" 1 name 2500
"103"
127.0.0.1:6379[11]> ttl name
脚本后面的1表示KEYS的个数,这里写的是1,所以name就是KEYS里面的值,后面的2500就是ARGV里面的值,redis的lua脚本根据脚本后面的第一个参数确定你传入的参数怎么划分KEYS和ARGV。
EVAL script numkeys key [key ...] arg [arg ...]
127.0.0.1:6379> eval "redis.call('SET', KEYS[1], ARGV[1]);redis.call('EXPIRE', KEYS[1], ARGV[2]); return 1;" 1 test 10 60
(integer) 1
格式
redis-cli --eval lua_file key1 key2 , arg1 arg2 arg3
注意事项
.lua
后缀,
隔开。前后需要空格。两种执行脚本的方式传参的方式稍微有点不一样,其他的都一样。
如果使用redis-cli
需要在脚本里面选择redis的库。要是在命令行里面就可以先选择库(如:redis.call('select',11)
),在执行命令,一般我们在使用的时候都是使用封装好的redis客户端,直接选择好 redis的库了。
lua的基本语法可以查看菜鸟教程。