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 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

    • 语法: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