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是单进程单线程执行,而程序能多进程多线程运行。