Lua 学习目标是 能写一些 Lua脚本。
Redis 使用Lua 5.1 版本。
Lua是动态类型语言。
1.数据类型
空 nil 没有赋值的变量或表的字段 都是nil
布尔 boolean 包含 true 和 false
字符串 string 如 'a' 或 "a"
表 table 既可以是 数组 又可以是 字典
函数 function 可以 存储在变量中, 作为函数参数,或返回结果
2. 变量
Redis脚本中 不能使用全局变量,只允许使用局部变量 防止脚本之间相互影响。
local c
local d = 1
local e,f
local say_hi = function()
print 'hi'
end
变量名 非数字开头,只能包含字母,数字,下划线,区分大小写
local x= 10
if true then
local x= x+1
print(x)
do
local x = x +1
print(x)
end
print(x)
end
print(x)
3. 注释
--
--[[
多行注释
]]
4. 赋值
local a,b = 1, 2
5. 操作符
(1) 数学 + - * / % - ^(幂运算)
(2) == ~= < > <= >=
(3) 逻辑操作符
not and or
(4). 连接操作符
print("hello" .. 'world')
(5). 取长度
print(#'hello')
6. if语句
if 条件表达式 then
else if 条件表达式 then
else
end
7 循环
while 条件表达式 do
end
repeat
until 条件表达式
for有两种方式
for 变量 = 初值 ,终值, 步长 do
语句块
end
其中步长,可以省略默认 1 如:
local sum = 0
for i = 1, 100 do
sum = sum + i
end
--注意 i 是局部变量 虽然 没有local
for 通用形式如下:
8. 表类型
a = {}
a[1] = "Bob"
a[2] = "Jeff"
注意: Lua 约定数组的索引从 1开始
for index, value in ipairs(a) do
print(index)
print(value)
end
也可以如下:
for i = 1, #a do
print(i)
print(a[i])
end
pairs 来遍历非数组 (字典) 的表值
9。 函数
local function square (...)
local argv = {...}
for(i = 1, #argv do
argv[1] = argv[i] * argv[i]
end
return unpack(argv) --相当于 return argv[1], argv[2],argv[3]
end
a,b,c = square(1,2,3)
return 和 break语句 必须是语句块 中的最后一个语句, 后面只能是 end , else , until. 如果希望 在语句中间使用 ,则 可以使用 人为的 do 和 end 将其包围
标准库
Base
String
Table
Math
Debug
Redis支持大部分标准库
其他库
cjson
cmsgpack
Redis 包含着两个库 ,
对redis来说,通常不应该在脚本中执行大量耗时的运算,因为Reids是单进程单线程执行,而程序能多进程多线程运行。