EVAL
执行Lua脚本EVALSHA
执行Lua脚本的sha1SCRIPT LOAD
加载Lua脚本到Redis ScriptSCRIPT FLUSH
清空Redis ScriptSCRIPT EXISTS
判断是否存在Rdis Script中在 Lua 脚本中,可以使用两个不同函数来执行 Redis 命令,它们分别是:
redis.call()//报错时会 抛出错误,Lua脚本停止执行
redis.pcall()//不会抛出错误,Lua脚本继续执行 下面的语句
redis数据类型 | lua数据类型 |
---|---|
integer | number |
bulk | string |
multi bulk | table |
status | 包含ok域的table |
error | 包含err域的table |
nil bulk | false |
Redis不允许Lua创建全局变量(变量添加 local 前缀)
为了防止数据泄露进lua环境,redis脚本不循序创建全局变量.
访问一个全局变量(无论是否存在)都会引起脚本停止
1.Eval
EVAL script numkeys key [key ...] arg [arg ...]
首先大家一定要知道eval的语法格式,其中:
<1> script: 你的lua脚本
<2> numkeys: key的个数
<3> key: redis中各种数据结构的替代符号
<4> arg: 你的自定义参数
Redis:
eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 arvg1 arvg2
2.Evalsha
Redis Evalsha 命令根据给定的 sha1 校验码,执行缓存在服务器中的脚本。
redis Evalsha 命令基本语法如下:
参数说明:
>= 2.6.0
3.Script Load
Redis Script Load 命令用于将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。
EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。
如果给定的脚本已经在缓存里面了,那么不执行任何操作。
在脚本被加入到缓存之后,通过 EVALSHA 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。
脚本可以在缓存中保留无限长的时间,直到执行 SCRIPT FLUSH 为止。
关于使用 Redis 对 Lua 脚本进行求值的更多信息,请参见 EVAL 命令。
4.Script Flush
Redis Script Flush 命令用于清除所有 Lua 脚本缓存。
redis Script Flush 命令基本语法如下:
总是返回 OK
5.Script kill
Redis Script kill 命令用于杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效。
这个命令主要用于终止运行时间过长的脚本,比如一个因为 BUG 而发生无限循环的脚本。
SCRIPT KILL 执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL 命令的阻塞当中退出,并收到一个错误作为返回值。
redis Script kill 命令基本语法如下:
redis 127.0.0.1:6379> SCRIPT KILL
总是返回 OK
redis 127.0.0.1:6379> SCRIPT KILL OK