lua脚本相关命令

  • ​​1、简介​​
  • ​​2、把lua脚本装载到缓存里​​
  • ​​3、通过evalsha命令执行缓存中的脚本​​
  • ​​4、清空缓存中lua脚本的命令​​
  • ​​5、用eval命令执行lua脚本​​

1、简介

  lua是一种比较轻量的脚本语言,可以嵌入应用程序中,能以较小的代价定制功能。在Redis里,也可以通过使用lua脚本来实现特定的效果。

  llua脚本是一个和Redis独立的技术,不仅能用在Redis里,还能用在其他场景中。

  l我们先使用docker命令创建redis容器再进入容器内部

lua脚本相关命令_redis


lua脚本相关命令_lua_02

2、把lua脚本装载到缓存里

  l可以通过​​script load script​​命令把lua脚本装载到缓存里,但此时不会执行该脚本,该命令返回的是给定脚本的SHA1校验和。

lua脚本相关命令_redis_03

  通过​​script load​​​命令,可以把’return 1+2’这段脚本装载到缓存里,从第2行的输出里能看到该脚本的校验和。随后可以通过​​script exists​​命令来判断指定校验和的脚本是否存在于缓存中,该命令用法如下:

lua脚本相关命令_运维_04

3、通过evalsha命令执行缓存中的脚本

可以通过evalsha命令来执行缓存中的脚本,该命令的格式如下:

evalsha sha1 numkeys key [key ...] arg [arg ...]

其中,sha1是缓存中的sha1校验和 numkeys是参数的个数,通过key参数能指定脚本中用到的键,通过arg可以指定脚本的参数。

  由于之前创建的脚本中包含了return语句,参数个数是0,因此可以通过如下命令来执行该脚本。

evalsha e13c398af9f2658ef7050acf3b266f87cfc2f6ab 0

lua脚本相关命令_校验和_05


  第1行evalsha命令的参数是之前装入缓存的lua脚本的sha1校验和,由于该脚本不带参数,所以numkeys参数值是0,从第2行里能看到该脚本返回的结果。

4、清空缓存中lua脚本的命令

  可以通过​​script flush​​命令来清空缓存中所有的lua脚本。

lua脚本相关命令_redis_06

5、用eval命令执行lua脚本

  在之前的范例中,是把lua脚本装载到缓存中并执行。在实际的项目里,arg指定脚本的参数。

eval script numkeys key [key ...] arg [arg ...]

lua脚本相关命令_缓存_07


  在第1行里,通过eval命令运行了双引号里的lua脚本,eval命令的参数1表示有1个参数,name和‘Peter’分别对应于脚本里的KEYS[1]和ARGV[1]。由于脚本是通过return语句返回KEYS[1]和ARGV[1]的,因此在第2行和第3行里能看到打印对应的值。