3.3 lua脚本相关命令
3.3.1 把lua脚本装载到缓存里
SCRIPT LOAD
语法:
SCRIPT LOAD script
将脚本script添加到脚本缓存中,但并不立即执行这个脚本.该命令返回给定脚本的SHA1校验和
例:
装载脚本:
127.0.0.1:6379> SCRIPT LOAD 'return 1 + 2'
"e412f6a7f0b07176d9824bb91205d9d54e88fdc0"
SCRIPT EXISTS
语法:
SCRIPT EXISTS script [script ...]
功能:校验指定的脚本是否已经被保存在缓存当中.返回值为一个列表,1表示脚本存在,0表示脚本不存在.列表中的元素和给定的SHA1校验和保持对应关系
例:
装载脚本:
127.0.0.1:6379> SCRIPT LOAD 'return 3 + 4'
"838b9ce712555508c95330c46ab526d2b01f4d5f"
根据校验和确认脚本是否存在:
127.0.0.1:6379> SCRIPT EXISTS e412f6a7f0b07176d9824bb91205d9d54e88fdc0 838b9ce712555508c95330c46ab526d2b01f4d5f abc123
1) (integer) 1
2) (integer) 1
3) (integer) 0
可以看到,由于不存在校验和为abc123
的脚本,因此对于该校验和的返回值为0
3.3.2 通过EVALSHA
命令执行缓存中的脚本
EVALSHA
命令执行缓存中的脚本EVALSHA
语法:
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
.其中:sha1:脚本的sha1校验和
numkeys:参数个数
key:表示在脚本中所用到的那些Redis键(key),这些键名参数可以在Lua中通过全局变量
KEYS
数组,用1为基址的形式访问(KEYS[1]
,KEYS[2]
,以此类推)arg:附加参数,在Lua中通过全局变量
ARGV
数组访问,访问的形式和KEYS变量类似(ARGV[1]
,ARGV[2]
,诸如此类)
功能:根据给定的sha1校验码,执行缓存在服务器中的脚本
例:执行上文加载的return 1 + 2
127.0.0.1:6379> EVALSHA e412f6a7f0b07176d9824bb91205d9d54e88fdc0 0
(integer) 3
3.3.3 清空缓存中lua脚本的命令
SCRIPT FLUSH
语法:
SCRIPT FLUSH
功能:清除所有Lua脚本缓存.该命令总是返回OK
确认脚本是否存在:
127.0.0.1:6379> SCRIPT EXISTS e412f6a7f0b07176d9824bb91205d9d54e88fdc0
1) (integer) 1
127.0.0.1:6379> SCRIPT EXISTS 838b9ce712555508c95330c46ab526d2b01f4d5f
1) (integer) 1
清空所有脚本:
127.0.0.1:6379> SCRIPT FLUSH
OK
确认脚本是否存在:
127.0.0.1:6379> SCRIPT EXISTS e412f6a7f0b07176d9824bb91205d9d54e88fdc0
1) (integer) 0
127.0.0.1:6379> SCRIPT EXISTS 838b9ce712555508c95330c46ab526d2b01f4d5f
1) (integer) 0
可以看到,脚本已经被清空了
3.3.4 用EVAL
命令执行LUA脚本
EVAL
命令执行LUA脚本EVAL
语法:
EVAL script numkeys key [key ...] arg [arg ...]
.其中:numkeys:参数个数
key:表示在脚本中所用到的那些Redis键(key),这些键名参数可以在Lua中通过全局变量
KEYS
数组,用1为基址的形式访问(KEYS[1]
,KEYS[2]
,以此类推)arg:附加参数,在Lua中通过全局变量
ARGV
数组访问,访问的形式和KEYS变量类似(ARGV[1]
,ARGV[2]
,诸如此类)
功能:直接运行脚本
例:
运行一段LUA脚本,该脚本接收1个Redis键名和1个参数.
127.0.0.1:6379> EVAL "return { KEYS[1], ARGV[1] }" 1 name 'Peter'
1) "name"
2) "Peter"
SCRIPT KILL
语法:
SCRIPT KILL
功能:杀死当前正在运行的LUA脚本.当且仅当这个脚本没有执行过任何写操作时,这个命令才生效,该命令执行后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从
EVAL
命令的阻塞当中退出,并收到一个错误作为返回值.
例:在没有LUA脚本正在运行时执行SCRIPT KILL
127.0.0.1:6379> SCRIPT KILL
(error) NOTBUSY No scripts in execution right now.
Last updated