Lua【通俗易懂】

目录

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()
            }

        }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/250013.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爬虫入门案例——Java还能用来写爬虫?

目录 前言 入门案例 依赖导入 爬虫代码 注意事项 爬取结果 总结 前言 我们在和Python程序员交流的时候&#xff0c;经常会听到他们谈论和爬虫相关的事&#xff0c;爬这个网站&#xff0c;爬那个网站的。这个时候如果听不懂的话&#xff0c;气氛就显得尴尬了。事实上我们…

Redis设计与实现之对象处理机制

目录 一、前言 二、对象处理机制 1、redisObject 数据结构&#xff0c;以及 Redis 的数据类型 2、 命令的类型检查和多态 3、对象共享 4、引用计数以及对象的销毁 三、对象的处理 1、Redis是如何处理字符串对象的&#xff1f; 2、Redis是如何处理列表对象的&#xff1f…

wireshark抓包分析HTTP协议,HTTP协议执行流程,

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取「HTTP协议」的数据包&#…

干货 | 一文搞定 pytest 自动化测试框架(一)

简介 pytest 是一个成熟的全功能 Python 测试工具&#xff0c;可以帮助您编写更好的程序。它与 Python 自带的 Unittest 测试框架类似&#xff0c;但 pytest 使用起来更简洁和高效&#xff0c;并且兼容 unittest 框架。pytest 有以下实用特性&#xff1a; pytest 能够支持简单…

mysql的ON DELETE CASCADE 和ON DELETE RESTRICT区别

​​ON DELETE CASCADE​​​ 和 ​​ON DELETE RESTRICT​​ 是 MySQL 中两种不同的外键约束级联操作。它们之间的主要区别在于当主表中的记录被删除时&#xff0c;子表中相关记录的处理方式。 ON DELETE CASCADE: 当在主表中删除一条记录时&#xff0c;所有与之相关的子表中…

Linux CentOS 安装 MySQL 8

Linux CentOS 安装 MySQL 8 一、离线安装 MySQL 1.1 检查是否已安装 MySQL rpm -qa | grep mysql如果已经安装了 MySQL&#xff0c;您可以通过以下步骤卸载它。 1.2 卸载已安装的 MySQL rpm -ev mysql80-community-release-el7-7.noarch rpm -ev mysql-community-client-pl…

设计模式——外观模式(结构型)

引言 外观模式是一种结构型设计模式&#xff0c; 能为程序库、 框架或其他复杂类提供一个简单的接口。 ​ 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。 正常情况下&#xff0c; 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确的顺序执行方法等。…

第1章:企业级研发测试流程

通过实际&#xff08;自研互联网&#xff09;企业的研发流程一览图。 我们发现分为9个阶段&#xff0c;当然每个公司细节并不一样。 所以我希望你能理解这句话&#xff1a; 一切的流程、行为、结果都是围绕“产品质量”这4个字开展活动。而作为测试&#xff0c;你该考虑的是如何…

26.Java安卓程序设计-基于SSM框架Android的网店系统设计与实现

1. 引言 1.1 背景 介绍网店系统的背景&#xff0c;说明为什么设计这个系统以及系统的重要性。 1.2 研究目的 阐述设计基于SSM框架的Android网店系统的目标和意义。 2. 需求分析 2.1 行业背景 分析网店行业的特点和需求&#xff0c;以及目前市场上同类系统的不足之处。 …

2012-12-12 下载ndk编译出so和可执行文件,放到android 真机运行,包含源码。

一、下载ndk链接NDK 下载 | Android NDK | Android Developers 二、解压ndk后得到下面的文件&#xff0c;里面包含ndk-build.cmd&#xff0c;这个是用来编译的。 三、Android.mk和C源码。完整源码下载路径https://download.csdn.net/download/qq_37858386/88622702 3.1 A…

SpringIOC之LoadTimeWeavingConfigurer

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

spring 笔记七 Spring JdbcTemplate

文章目录 Spring JdbcTemplateJdbcTemplate概述JdbcTemplate开发步骤Spring产生JdbcTemplate对象 Spring JdbcTemplate JdbcTemplate概述 它是spring框架中提供的一个对象&#xff0c;是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如&am…

Python基础教程——制作一个宿舍管理系统(完整版,附源码)

今天我们一起学习一个新的小案例——宿舍管理系统。主要涉及列表、字典的初始化、增加、删除、修改和查询操作&#xff0c;以及函数的定义和调用。 一、需求&#xff1a; 有操作指引界面&#xff0c;显示操作号 能添加一个新的入住学生信息&#xff0c;包括学生姓名、宿舍号床…

vue3引入Echarts图表

说明&#xff1a;echarts是父组件&#xff0c;stack是子组件&#xff0c;将stack引入到echarts文件中 查看echarts.vue时可看到stack.vue中的图表 # # # 引入方式 第一步 Echarts官网&#xff1a;快速上手 - 使用手册 - Apache ECharts 第二步 在控制台安装Echarts模块…

25.Java程序设计-基于SSM框架的微信小程序校园求职系统的设计与实现

1. 引言 1.1 背景 介绍校园求职系统的背景&#xff0c;说明为什么设计这个系统以及系统的重要性。 1.2 研究目的 阐述设计基于SSM框架的微信小程序校园求职系统的目标和意义。 2. 需求分析 2.1 行业背景 分析校园求职行业的特点和需求&#xff0c;以及目前市场上同类系统…

基于Java的教学信息反馈系统设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于Java的教学信息反馈…

高频Postman接口测试面试题

一、Postman在工作中使用流程是什么样的&#xff1f; 新建集合管理根据接口所属的模块&#xff0c;在集合中不同模块下编写接口测试用例处理接口之间的数据关联操作添加环境变量在tests tab下中增加断言调试接口&#xff0c;确保接口能被正常调用批量运行用例或者导出通过Newm…

Dubbo 快速入门使用教程

文章目录 Dubbo 介绍Dubbo 入门使用一、Zookeeper 注册中心安装启动二、服务提供方三、服务消费方 Dubbo 介绍 dubbo 2.x版本官方文档 参考 Apache Dubbo 是一款 RPC&#xff08;Remote Procedure Call 远程过程调用&#xff09;服务开发框架&#xff0c;提供了远程调用方案和…

RabbitMQ死信队列详解

什么是死信队列 由于特定的**原因导致 Queue 中的某些消息无法被消费&#xff0c;**这类消费异常的数据将会保存在死信队列中防止消息丢失&#xff0c;例如用户在商城下单成功并点击支付后&#xff0c;在指定时间未支付时的订单自动失效死信队列只不过是绑定在死信交换机上的队…

为什么谷歌每年向苹果支付180亿美元“保护费”

在大众印象里&#xff0c;谷歌和苹果似乎处处“水火不容”。 两大科技巨擘在各类产品和服务上竞争&#xff0c;比如操作系统、浏览器、地图、数字助理、手机&#xff0c;数不胜数。但是在这种敌对关系背后&#xff0c;却有着对他们双方都有利的秘密伙伴关系。 你或许不知道&am…