Redis-学-02-Redis脚本(Lua)
Redis 脚本使用 Lua 解释器来执行脚本。Redis2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。
语法
Eval 命令基本语法如下:
redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]
参数说明:
- script 是一段 Lua5.1 脚本程序。脚本不必(也不应该)定义为一个 Lua 函数。
- numkeys:指定键名参数个数
- key [key …]:从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
- arg [arg …]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。
无参数:
127.0.0.1:6379> eval "return 'helo'" 0
"helo"
127.0.0.1:6379>
一个参数:
127.0.0.1:6379> eval "if KEYS[1] == ARGV[1] then return 1 else return 0 end" 1 key1 abcde
(integer) 0
127.0.0.1:6379>
多个参数:
127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"
127.0.0.1:6379>
使用 Redis 命令:redis.call(’’)。下面的意思表示如果 key对应的value值和传入的值相等,那么则删除该key,value键值对,否则返回0。
127.0.0.1:6379> eval "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end" 1 good good
(integer) 0
127.0.0.1:6379>