[关闭]
@Chiang 2020-01-03T09:23:50.000000Z 字数 1849 阅读 506

Redis 脚本

Redis


Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。

eval

Redis Eval 命令使用 Lua 解释器执行脚本。

  1. redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

参数说明:

  • script: 参数是一段 Lua 5.1 脚本程序。脚本不必(也不应该)定义为一个 Lua 函数。
  • numkeys: 用于指定键名参数的个数。
  • key [key ...]: 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
  • arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。
  1. redis 127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
  2. 1) "key1"
  3. 2) "key2"
  4. 3) "first"
  5. 4) "second"

evalsha

Redis Evalsha 命令根据给定的 sha1 校验码,执行缓存在服务器中的脚本。
将脚本缓存到服务器的操作可以通过 SCRIPT LOAD 命令进行。
这个命令的其他地方,比如参数的传入方式,都和 EVAL 命令一样。

  1. redis 127.0.0.1:6379> SCRIPT LOAD "return 'hello moto'"
  2. "232fd51614574cf0867b83d384a5e898cfd24e5a"
  3. redis 127.0.0.1:6379> EVALSHA "232fd51614574cf0867b83d384a5e898cfd24e5a" 0
  4. "hello moto"

script exists

Redis Script Exists 命令用于校验指定的脚本是否已经被保存在缓存当中。

  1. redis 127.0.0.1:6379> SCRIPT LOAD "return 'hello moto'" # 载入一个脚本
  2. "232fd51614574cf0867b83d384a5e898cfd24e5a"
  3. redis 127.0.0.1:6379> SCRIPT EXISTS 232fd51614574cf0867b83d384a5e898cfd24e5a
  4. 1) (integer) 1
  5. redis 127.0.0.1:6379> SCRIPT FLUSH # 清空缓存
  6. OK
  7. redis 127.0.0.1:6379> SCRIPT EXISTS 232fd51614574cf0867b83d384a5e898cfd24e5a
  8. 1) (integer) 0

script flush

Redis Script Flush 命令用于清除所有 Lua 脚本缓存。

  1. redis 127.0.0.1:6379> SCRIPT FLUSH
  2. OK

script kill

Redis Script kill 命令用于杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效。
这个命令主要用于终止运行时间过长的脚本,比如一个因为 BUG 而发生无限循环的脚本。
SCRIPT KILL 执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL 命令的阻塞当中退出,并收到一个错误作为返回值。

  1. redis 127.0.0.1:6379> SCRIPT KILL
  2. OK

script load

Redis Script Load 命令用于将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。
EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。
如果给定的脚本已经在缓存里面了,那么不执行任何操作。
在脚本被加入到缓存之后,通过 EVALSHA 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。
脚本可以在缓存中保留无限长的时间,直到执行 SCRIPT FLUSH 为止。
关于使用 Redis 对 Lua 脚本进行求值的更多信息,请参见 EVAL 命令。

  1. redis 127.0.0.1:6379> SCRIPT LOAD "return 1"
  2. "e0e1f9fabfc9d4800c877a703b823ac0578ff8db"

参考资料:
Redis 脚本

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注