- Lua基本语法
- 表类型
- 函数
- Redis执行脚本
- KEYS与ARGV
- 沙盒与随机数
- 脚本相关命令
- 原子性和执行时间
Lua是一种高效的轻量级脚本语言,能够方便地嵌入到其他语言中使用。在Redis中,借助Lua脚本可以自定义扩展命令。
Lua基本语法
数据类型
- 空(nil),没有赋值的变量或表的字段值都是nil
- 布尔(boolean)
- 数字(number),整数或浮点数
- 字符串(string),字符串可以用单引号或双引号表示,可以包含转义字符如\n \r等
- 表(table),表类型是Lua语言中唯一的数据结构,既可以当数组又可以当字典,十分灵活
- 函数(function),函数在Lua中是一等值(first-class-value),可以存储在变量中、作为函数的参数或返回结果。
变量
Lua的变量分为全局变量和局部变量,全局变量无需声明就可以直接使用,默认值是nil。
全局变量:
a=1 -- 为全局变量a赋值
print(b) -- 无需声明即可使用,默认值是nil
局部变量:
local c -- 声明一个局部变量c,默认值是nil
local d=1 -- 声明一个局部变量d并赋值为1
local e,f -- 可以同时声明多个局部变量
但在Redis中,为了防止脚本之间相互影响,只允许使用局部变量。
赋值
Lua支持多重赋值,如:
local a,b=1,2 --a的值是1,b的值是2
local c,d=1,2,3 --c的值是1,d的值是2,3被舍弃了
local e,f =1 --e的值是1,f的值是nil
操作符
-
数学操作符,包括常见的+ - * \ %(取模) -(一元操作符,取负)和幂运算符号^。
-
比较操作符,包括== ~=(不等于) > < >= <=。
比较操作符不会对两边的操作数进行自动类型转换:
pring(1=='1') --结果为false
print({'a'}=={'a'}) -false,表类型比较的是二者的引用
- 逻辑操作符
包括下面三个:
not,根据操作数的真和假相应地返回false和true;
and,a and b中如果a是真则返回b,否则返回a;
or,a or b中,如果a是真则返回a,否则返回b。
这些根据操作符短路的原理可以推断出。
print(1 and 5) --5
print(1 or 5) --1
print(not 0) --false
print('' or 1) --''
只要操作数不是nil或false,逻辑操作符就认为操作数是真,