Redis-学-02-Redis脚本(Lua)

只谈情不闲聊 提交于 2019-11-29 05:45:35

Redis-学-02-Redis脚本(Lua)

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

语法

Eval 命令基本语法如下:

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

参数说明:

  1. script 是一段 Lua5.1 脚本程序。脚本不必(也不应该)定义为一个 Lua 函数。
  2. numkeys:指定键名参数个数
  3. key [key …]:从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
  4. 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> 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!