命令 | 作用 |
EVAL script numkeys key [key …] arg [arg …] | 执行lua脚本 |
EVALSHA sha1 numkeys key [key …] arg [arg …] | 根据给定的 sha1 校验码,执行缓存在服务器中的脚本 |
SCRIPT EXISTS script [script …] | 查看指定的脚本是否已经被保存在缓存当中 |
SCRIPT FLUSH | 从脚本缓存中移除所有脚本 |
SCRIPT LOAD script | 将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本 |
SCRIPT KILL | 杀死当前正在运行的 Lua 脚本 |
1.缓存脚本
1) Redis Script Load 命令用于将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。
2)EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。
3)如果给定的脚本已经在缓存里面了,那么不执行任何操作。
4)在脚本被加入到缓存之后,通过 EVALSHA 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。
5)脚本可以在缓存中保留无限长的时间,直到执行 SCRIPT FLUSH 为止。
2.执行lua脚本
redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]
参数 | 作用 |
script | Lua 脚本程序 |
numkeys | 指定键名参数的个数 |
key [key …] | 脚本中所用到的那些 Redis 键(key),通过全局变量 KEYS 数组访问 |
arg [arg …] | 附加参数,在 Lua 中通过全局变量 ARGV 数组访问 |
redis 127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"
3.根据给定的 sha1 校验码,执行缓存在服务器中的脚本
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
参数 | 作用 |
sha1 | 通过 SCRIPT LOAD 生成的 sha1 校验码 |
numkeys | 指定键名参数的个数 |
key [key …] | 脚本中所用到的那些 Redis 键(key),通过全局变量 KEYS 数组访问 |
arg [arg …] | 附加参数,在 Lua 中通过全局变量 ARGV 数组访问 |
127.0.0.1:6379> SCRIPT FLUSH
OK
127.0.0.1:6379> SCRIPT LOAD "return 'hello,lua'"
"880f98eb45cf5dee079a0f4e0918dda6304292e2"
127.0.0.1:6379> EVALSHA "880f98eb45cf5dee079a0f4e0918dda6304292e2" 0
"hello,lua"
4.杀死当前正在运行的脚本
SCRIPT KILL
Redis Script kill 命令用于杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效。
这个命令主要用于终止运行时间过长的脚本,比如一个因为 BUG 而发生无限循环的脚本。
SCRIPT KILL 执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL命令的阻塞当中退出,并收到一个错误作为返回值。
5.查看指定脚本是否在缓存中
Script Exists 命令用于校验指定的脚本是否已经被保存在缓存当中,返回一个列表,包含 0 和 1 ,前者表示脚本不存在于缓存,后者表示脚本已经在缓存里面
SCRIPT EXISTS sha1 [sha1 ...]
127.0.0.1:6379> SCRIPT LOAD "return 'hello,lua'"
"880f98eb45cf5dee079a0f4e0918dda6304292e2"
127.0.0.1:6379> SCRIPT EXISTS "880f98eb45cf5dee079a0f4e0918dda6304292e2"
1) (integer) 1
127.0.0.1:6379> SCRIPT FLUSH
OK
127.0.0.1:6379> SCRIPT EXISTS "880f98eb45cf5dee079a0f4e0918dda6304292e2"
1) (integer) 0
127.0.0.1:6379>