lua是一种比较轻量的脚本语言,可以嵌入应用程序中,能以较小的代价定制功能。在Redis里,也可以通过使用lua脚本来实现特定的效果。 llua脚本是一个和Redis独立的技术,不仅能用在Redis里,还能用在其他场景中。 l我们先使用docker命令创建redis容器再进入容器内部
l可以通过script load script
命令把lua脚本装载到缓存里,但此时不会执行该脚本,该命令返回的是给定脚本的SHA1校验和。
通过script load
命令,可以把’return 1+2’这段脚本装载到缓存里,从第2行的输出里能看到该脚本的校验和。随后可以通过script exists
命令来判断指定校验和的脚本是否存在于缓存中,该命令用法如下:
可以通过evalsha命令来执行缓存中的脚本,该命令的格式如下:
evalsha sha1 numkeys key [key ...] arg [arg ...]
其中,sha1是缓存中的sha1校验和 numkeys是参数的个数,通过key参数能指定脚本中用到的键,通过arg可以指定脚本的参数。
由于之前创建的脚本中包含了return语句,参数个数是0,因此可以通过如下命令来执行该脚本。
evalsha e13c398af9f2658ef7050acf3b266f87cfc2f6ab 0
第1行evalsha命令的参数是之前装入缓存的lua脚本的sha1校验和,由于该脚本不带参数,所以numkeys参数值是0,从第2行里能看到该脚本返回的结果。
可以通过script flush
命令来清空缓存中所有的lua脚本。
在之前的范例中,是把lua脚本装载到缓存中并执行。在实际的项目里,arg指定脚本的参数。
eval script numkeys key [key ...] arg [arg ...]
在第1行里,通过eval命令运行了双引号里的lua脚本,eval命令的参数1表示有1个参数,name和‘Peter’分别对应于脚本里的KEYS[1]和ARGV[1]。由于脚本是通过return语句返回KEYS[1]和ARGV[1]的,因此在第2行和第3行里能看到打印对应的值。