Lua【通俗易懂】

发布时间:2023年12月20日

目录

1.什么是lua??????

2.特点???????

3.安装???????

4.Lua使用??????

5.Lua的注释???????

6.数据类型???????

7.控制结构?


1.什么是lua??????

Lua是一种轻量、小巧的脚本语言,用标准C语言编写并以源代码形式开发。设计的目的是为了嵌入到其他应用程序中,从而为应用程序提供灵活的扩展和定制功能。

2.特点???????

  • 简洁、易学、易用

  • 跨平台特性

  • 高效性

  • 可扩展性

  • 泛型编程能力强

  • 支持面向对象编程

  • 可嵌入性

3.安装???????

下载地址:https://www.lua.org/download.html

上传到Linux ,并解压缩即可

?

4.Lua使用??????

1.交互式?

交互式是指可以在命令行输入程序,然后回车就可以看到运行的效果。

  • 直接使用 lua 或者 lua -i 直接使用lua?

2.脚本式?

脚本式是将代码保存到一个以lua为扩展名的文件中并执行的方式。

?2.1方式一

  • 1.创建文件,并以.lua结尾
  • 2.在文件中输入内容
  • 3.使用 lua? 文件名.lua 执行

2.2方式二?

  • 在文件中添加 用脚本执行的命令

  • ?给文件添加执行权限
chmod +x 文件名
  • 执行文件

5.Lua的注释???????

关于Lua的注释要分两种:

  • 单行注释
  • 多行注释

1.单行注释

- - 注释内容

2.多行注释

- -【【

? ? 注释的内容

- -】】

注:若要取消多行注释 只需在前面加? - -

6.数据类型???????

nil(空,无效值)

boolean(布尔,true/false)?只会将false和nil视为假,其他的都视为真

number(数值)

string(字符串)

function(函数)

table (表) eg? a={1,2,3} a[1]=1;下标从1开始

thread(线程)

userdata(用户数据)

7.控制结构???????

1.if条件

if then elseif else

if语句先测试其条件,并根据条件是否满足执行相应的then部分或else部分。else部分是可选的。

2.while循环?

while 条件 do

? ? ? ? 循环体

end

3.repeat循环?

repeat

? ? 循环体

until 条件

4.for循环?

4.1数值for循环

for param=exp1,exp2,exp3 do

? ?循环体

end

注: exp1:开始的值

? ? ? ? exp2:结束的值

? ? ? ? exp3:步长

4.2泛型for循环?

for i,v in ipairs(×) do

? 循环体

end

注: i:数组的索引值

? ? ? ??v:对应索引的数组元素值

?ipairs:迭代函数 ,x是要遍历的数组

? ? ?

  • ipairs?

  • pairs?

?

8.ngx_lua模块???????

?ngx-lua模块通过将lua解释器集成进Nginx,可以采用lua脚本实现业务逻辑,由于lua的紧凑、快速以及内建协程,所以在保证高并发服务能力的同时极大地降低了业务逻辑实现成本。

8.1.OpenRestry

1.什么是openRestry

OpenResty是一个基于Nginx与Lua的高性能Web 平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。本身OpenResty内部就已经集成了Nginx和Lua,所以我们使用起来会更加方便

2.下载

下载地址https://openresty.org/cn/download.html

  • 解压缩安装目录,并进入目录,将其安装到指定目录下
  • ./configure --prefix=/usr/local/openresty
  • 如果安装失败查看是否安装openssl,如若没有执行安装
yum -y install openssl openssl-devel
  • 进入安装好的目录,可以看到有nginx

  • 进入nginx.conf并进行配置 ,并编写语句
 location /lua {
            default_type 'text/html';
            content_by_lua 'ngx.say("<h1>hello xz</h1>")';        
}
  • 浏览器查看,说明安装成功?

8.2ngx_lua的使用?

  • set_by_lua的使用
 location /getByGender {
            default_type 'text/html';
            set_by_lua  $param "
              --获取请求url上的参数对应的值name gender
              local uri_args = ngx.req.get_uri_args()
              local name = uri_args['name']
              local gender = uri_args['gender']
              --条件判断if gender 1 先生 0 女士
              if gender == '1' then
                        return name..'先生'
              elseif gender == '0' then
                        return name..'女士'
              else
                        return name
              end
            ";
            charset utf-8;
            return 200 $param;
        }

8.3操作Redis?

  • lua-resty-redis

提供了访问Redis的详细API,包括创建对接、连接、操作、数据处理等。这些API基本上与Redis的操作--对应。

  • (1) redis = require "resty.redis" : 引入相关内容
  • (2) new 语法: redis,err = redis:new(),创建一个Redis对象。
  • (3) connect 语法:ok,err=redis:connect(host,port[,options_table]),设置连接Redis的连接信息。ok:连接成功返回 1,连接失败返回nil? err:返回对应的错误信息
  • (4) set_timeout 语法:redis:set_timeout(time),设置请求操作Redis的超时时间。
  • (5) close 语法: ok,err = redis:close(),关闭当前连接,成功返回1,失败返回nil和错误信息
  • (6) redis命令对应的方法在1ua-resty-redis中,所有的Redis命令都有自己的方法,方法名字和命令名字相同,只是全部为小写。
    location /redis {
            default_type "text/html";

            content_by_lua_block {
                -- 引入redis对应接口对象
                local redis = require "resty.redis"
                -- 创建一个redis对象
                local red = redis:new()
                -- 设置超时时间
                red:set_timeout(1000)
                -- 获取链接
                local ok,err = red:connect("192.168.20.130",6379)
                if not ok then
                        ngx.say("failed to connection redis",err)
                        return
                end
                -- 获取密码
                ok,err = red:auth("123456")
                if not ok then
                        ngx.say("failed to password",err)
                        return
                end
                -- 往redis中存数据
                ok,err = red:set("user","tom")
                if not ok then
                        ngx.say("failed to set user",err)
                        return
                end
                -- 从redis中取数据
                local res,err = red:get("user")
                ngx.say(res)
                -- 关闭redis连接
                red:close()
            }

        }

?

文章来源:https://blog.csdn.net/dfdg345/article/details/134829002
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。