一: script命令
可以使用script命令将对lua脚本进行操作
script load
用于将lua脚本加载到redis中
命令: redis-cli -h ip -p 端口 -a 密码 script load "$(cat, lua脚本.lua)"
执行完上面这条命令后, 会返回一个sha码
可以通过这个 sha码直接在 redis客户端中执行脚本(evalsha 命令)
script exists
用于检查 lua文件是否存在redis(使用 上一步返回的 sha码)
命令 : redis-cli -h ip -p 端口 -a 密码 script exists sha码
sha码可以多个, 返回1 则证明存在
script flush
用于将redis中的lua文件清空
命令: redis-cli -h ip -p 端口 -a 密码 script flush
script kill
用于杀掉正在执行的lua脚本, 因为有可能脚本执行时间过长
命令: redis-cli -h ip -p 端口 -a 密码 script kill
二:redis 执行 lua脚本
eval 命令
命令格式为: eval script numkeys key [key ...] arg [arg ...]
命令解释:
script 为 lua脚本, 使用 '' 括起来. 在lua脚本中, 如果想获取参数, 使用 KEYS[index] 跟 ARGV[index]。
number 参数为指定 后面key值的个数. key跟arg都可以写多个, key跟arg之间的区分其实就是使用了number 这个值, 例如 number 为2 , 在number后面跟了 1 2 3 这三个参数 , 那么1 2 则是key,使用KEYS[1] KEYS[2] 可以获取 1 2 这两个参数。3 则是arg参数,使用ARGV[1] 获取这个 3 参数。
例子: eval 'return "key1 = " .. KEYS[1] .. ", arg1 = " .. ARGV[1] ' 1 key1 argv1
执行结果为 : "key1 = key1, arg1 = argv1"
evalsha命令
命令格式为 evalsha sha1 numkeys key [key ...] arg [arg ...]
sha1为 script load命令加载lua脚本之后返回的 数据, 后面的跟eval数据一样
使用redisson执行lua脚本
script.eval(RScript.Mode.READ_WRITE, INCR_LONG_TTL_SHA,
RScript.ReturnType.VALUE, Collections.singletonList(key), ttl);
注意: 如果使用redisson执行lua脚本, 在创建Redisson客服端时, Config 需要加上这个配置config.setCodec(new StringCodec()); 否则会报错