美文网首页
lua脚本学习

lua脚本学习

作者: 温岭夹糕 | 来源:发表于2024-07-31 23:07 被阅读0次

目录

链接地址

1.环境安装

lua官网linux源码安装教程

curl -L -R -O https://www.lua.org/ftp/lua-5.4.7.tar.gz
tar zxf lua-5.4.7.tar.gz
cd lua-5.4.7
make all test

测试安装

lua -v
//或者
lua -i

2.快速上手

2.1注释

单行

--

多行

--[[
 多行注释
 多行注释
 --]]

2.1变量

使用print函数打印
默认情况下,变量总认为是全局,变量默认值为nil

> b=10
> print(b)
10
>print(a)
nil

哪怕是语句块或函数都是,下面是定义并执行了hi函数,然后输出c=5

> function hi()
>>   c=5
>> end
> hi()
> print(c)
5

局部变量需要使用local显式声明

> function hi()
>>  local c=5
>>  d=1
>> end
> hi()
> print(c,d)
nil 1

语句赋值和go相似,支持swap赋值

> a,b=1,2
> b,a=a,b
> print(a,b)
2   1

有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table
其中table表可以理解为一个关联数组(map),使用[]或点符号来访问元素

> tb = {}
> tb["a"]=1
> tb["b"]=2
> print(tb["a"])
1
> print(tb.b)
2
> for key,val in pairs(tb) do
>>   print(key,val)
>> end
a   1
b   2

与go的map不同的是这个下标是可以数字和字符串混合的

2.2 循环

while循环

while(condition)
do
   statements
end

for 循环类似python,下面意思表示var 从exp1变化到exp2,每次变化exp3步长,适用于数字

for var=exp1,exp2,exp3 do  
    <执行体>  
end  

如果是table类型需要借助ipairs函数,类似go for range循环

a = {"one", "two", "three"}
for i, v in ipairs(a) do
    print(i, v)
end 

repeat循环类似其他语言的do while语法,只是until是停止条件

repeat
   statements
until( condition )

同时循环也可嵌套

2.4流程控制

if语句

if( 布尔表达式 1)
then
   --[ 在布尔表达式 1 为 true 时执行该语句块 --]

elseif( 布尔表达式 2)
then
   --[ 在布尔表达式 2 为 true 时执行该语句块 --]

elseif( 布尔表达式 3)
then
   --[ 在布尔表达式 3 为 true 时执行该语句块 --]
else 
   --[ 如果以上布尔表达式都不为 true 则执行该语句块 --]
end

2.5函数

lua的函数可以和go类似可以有多个返回值,用end表示结束,支持可变参数

function add(...)  
local s = 0  
  for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组  
    s = s + v  
  end  
  return s  
end  
print(add(3,4,5,6,7))  --->25

2.5运算符

区别于go:

  • 没有自增运算符
  • 不等于为
~=
  • 逻辑运算符为and / or / not
  • 字符串连接运算符为减号-
  • 一元运算符为井号#,表示返回字符串或表长度

3.Redis中使用lua脚本

3.1首要注意

Lua脚本在Redis中是以原子方式执行的,在Redis服务器执行EVAL命令时,在命令执行完毕并向调用者返回结果之前,只会执行当前命令指定的Lua脚本包含的所有逻辑,其它客户端发送的命令将被阻塞
因此实际使用lua进行redis命令编写中:

  • LUA脚本不宜编写一些过于复杂了逻辑,必须尽量保证Lua脚本的效率,否则会影响其它客户端。
  • 在Lua脚本中不要编写function函数,整个脚本作为一个函数的函数体
  • 在脚本编写中声明的变量全部使用local关键字。
  • 在集群中使用Lua脚本要确保逻辑中所有的key分到相同机器,也就是同一个插槽(slot)中,可采用Redis Hash Tag技术

3.2EVAL命令

redis使用eval命令执行lua脚本

EVAL luascript numkeys key [key ...] arg [arg ...]
  • luascript :Lua 脚本
  • numkeys :指定的Lua脚本需要处理键的数量,其实就是 key数组的长度。
  • key :传递给Lua脚本零到多个键,空格隔开,在Lua 脚本中通过 KEYS[INDEX]来获取对应的值,其中1 <= INDEX <= numkeys。
  • arg:是传递给脚本的零到多个附加参数,空格隔开,在Lua脚本中通过ARGV[INDEX]来获取对应的值,其中1 <= INDEX <= numkeys。

相关文章

网友评论

      本文标题:lua脚本学习

      本文链接:https://www.haomeiwen.com/subject/jetohjtx.html