- Lua脚本:Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
- 使用脚本的好处:
- 减少网络开销,在Lua脚本中可以把多个命令放在同一个脚本中运行。
- 原子操作,redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。换句话说,编写脚本的过程中无需担心会出现竞态条件。
- 复用性,客户端发送的脚本会永远存储在redis中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑 。
-
Lua在linux中的安装
- 到官网下载lua的tar.gz的源码包http://www.lua.org/versions.html
- tar -zxvf lua-5.3.5.tar.gz
- 进入解压的目录:cd lua-5.2.0
- make linux (linux环境下编译)
- make install
- 如果报错,说找不到readline/readline.h,
可以通过yum命令安装 yum -y install readline-devel ncurses-devel 安装完以后再 make linux / make install 最后,直接输入 lua命令即可进入lua的控制台
- 基础
全局变量:a=1 局部变量:local a=2 逻辑表达式:+ - * / % 比较两个值是否相等:a==b 不等于:~= 类型不能够自动转换 逻辑运算符:and/or 逻辑非:not(a and b)
字符串拼接:a..b
计算字符长度:#
-
- 循环:
for i=1,100 do print(i) end
-
- 遍历数组:
local xx={"a","b","c"} for i,v in ipairs(xx) do print(v) end
-
- 注释:
范围注释:--[[ ]]
单行注释:--
-
- 函数:
local add(a,b) return a+b end print(add(1,2))
- redis中执行lua脚本
1 Redis提供了EVAL命令可以使开发者像调用其他Redis内置命令一样调用脚本。 2 3 [EVAL] [脚本内容] [key参数的数量] [key …] [arg …] 4 5 可以通过key和arg这两个参数向脚本中传递数据,他们的值可以在脚本中分别使用KEYS和ARGV 这两个类型的全局变量访问。 6 7 比如我们通过脚本实现一个set命令,通过在redis客户端中调用,那么执行的语句是: 8 9 lua脚本的内容为: return redis.call(‘set’,KEYS[1],ARGV[1]) //KEYS和ARGV必须大写 10 11 eval "return redis.call('set',KEYS[1],ARGV[1])" 1 hello world 12 13 EVAL命令是根据 key参数的数量-也就是上面例子中的1来将后面所有参数分别存入脚本中KEYS和ARGV两个表类型的全局变量。 14 15 当脚本不需要任何参数时也不能省略这个参数。如果没有参数则为0 16 17 eval "return redis.call(‘get’,’hello’)" 0