redis脚本使用lua解释器来执行脚本,redis2.6版本通过内嵌支持lua环境,执行脚本的常用命令为eval
eval命令
语法:eval script numkeys key [key ...] arg [ arg ...]
实例:
script:参数是一段脚本程序,脚本不必(也不应该)定义为一个Lua函数。
numberkeys:用于指定键名参数的个数。
key【key...】 :从eval的第三个参数开始算起,表示在脚本中所用的到那些redis键(key),这些键名参数可以在Lua中通过全局变量keys数组,用1位基址的形式访问(keys[1],keys[2])
arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。
1 127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],KEYS[3],ARGV[1],ARGV[2],ARGV[3]}" 3 shi zhang yang 23 21 20 2 1) "shi" 3 2) "zhang" 4 3) "yang" 5 4) "23" 6 5) "21" 7 6) "20"
evalsha命令
evalsha命令根据给定的sha1校验码,执行缓存在服务器中的脚本。
将脚本缓存到服务器的操作可以通过SCRIPT LOAD命令进行。
这个命令的其他地方,不如参数的传入方式,都喝EVAL命令一样。
evalsha命令基本语法: evalsha sha1 numkeys key [key...] arg[arg ...]
sha1:通过SCRIPT LOAD 生成的sha1校验码。
key [key ...]: 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。
实例:
1 127.0.0.1:6379> script load "return ‘hello moto‘" 2 "232fd51614574cf0867b83d384a5e898cfd24e5a" 3 127.0.0.1:6379> evalsha "232fd51614574cf0867b83d384a5e898cfd24e5a" 0 4 "hello moto"