淘先锋技术网

首页 1 2 3 4 5 6 7

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