Lua脚本

LUA脚本百度百科
学习redis发现支持lua脚本,特简单学习并记录下lua入门级的知识

可参考菜鸟教程

1.Windows下环境变量配置

下载链接
下载完成后解压到指定文件夹,不要携带中文路径,难免发生点什么
然后【电脑】-【属性】-【高级系统设置】-【高级】-【环境变量】-【系统变量】-【找到Path】-【新建】-【将刚刚解压后的路径添加到Path下(lau.exex的所在目录)】-【确认保存】
在这里插入图片描述
打开命令行,输入lua54,进行lua命令行,环境即算配置成功
在这里插入图片描述

2. 数据类型

2.1 nil

表示空,如果对一个变量赋值nil,表示删除该变量,不是释放对应变量指向值的内存

2.2 string

2.2.1 表示字符串的三种方式

在这里插入图片描述
1)''中的内容表示字符串

2)""中的内容表示字符串

3)[[]]双括号中的内容也表示字符

2.2.2 字符串连接

在这里插入图片描述
使用…可以将字符串进行连接

2.2.3 字符串简单操作的函数(简单的几个)

在这里插入图片描述

函数名称解释
string.upper()字符串全部大写
string.lower()字符串全部小写
string.len()也可以使用 #"666"计算字符串长度
string.reverse()字符串反转

2.3 number

lua只有双精度类型的数值

2.4 boolean

在这里插入图片描述
此类型只有true和false两种值,nil也是false,数值0是true

2.5 userdata

todo 待补充

2.6 table

通过构造表达式来创建table

table = {"tomato", "potato", "cabbage"}
for k, v in pairs(table) do
    print(k .. ":" ..v)
end

在这里插入图片描述

table[1] = "tomato1"
for k, v in pairs(table) do
    print(k .. ":" ..v)
end

在这里插入图片描述

table = {k1="tomato", k2="potato", k3="cabbage"}
for k, v in pairs(table) do
    print(k.. ":" ..v)
end

在这里插入图片描述

2.7 function

定义一个函数提供使用

function f1(n)
    if n == 0 then
        return 1
    else
        return f1(n - 1) * n
    end
end
print(f1(3))

在这里插入图片描述
函数也可以被当做变量传递

f2 = f1
print(f2(4)) 等价于 print(f1(4))

在这里插入图片描述
函数也可以被当做参数传递到方法内

function f2(tab, f3)
    for k,v in pairs(tab) do
        print(f3(k,v))
    end
end
tab = {k1="key1", k2="key2"}
f2(tab, function(k, v)
    return k.. "=" ..v
end)

在这里插入图片描述

2.8 thread

todo 待补充

3. 变量

可以通过type(变量),获取变量的类型
lua中的变量有三种,不做任何声明则默认是全局变量

  1. 全局变量
    a = 10 无论这个赋值语句执行在任何一个地方,他都是全局变量,除了先被局部变量声明过,再进行赋值的情况
  2. 局部变量
function f1()
    a = 100
    local b = 10
    -- 对局部变量b重新赋值
    b = 100
end
f1()
print(a, b)

在这里插入图片描述

  1. 表中的域
    tab1 = {}

变量批量赋值

x, y = 10, 20
print(x, y)
--变量交换值
x, y = y, x;
print(x, y)

在这里插入图片描述

4. 流程控制

流程控制无非就是 if 、else、嵌套if else

if type(nil) == nil then
    print("nil == nil")
    else
    print("nil ~= mil")
end

在这里插入图片描述
注意type(nil)计算出值的类型是string,所以才不等于nil

-- 结果是nil
print(type(nil))
--结果是string
print(type(type(nil)))

在这里插入图片描述

5. 循环体

lua的循环体有三种

5.1 for循环

循环控制在语句内控制

for i = 1, 10 do
    print(i)
end
tab = {k1="tomato", k2="potato", k3="cabbage"}
for i, v in pairs(tab) do
    print(i, v)
end

在这里插入图片描述

5.2 while循环

先判断条件,在执行语句,也是在语句内控制

a = 10
while a > 0 do
    print("666")
    a = a - 1
end

在这里插入图片描述

5.3 repeat util

先执行语句,直到条件为true时,跳出循环,语句内控制

a = 10
repeat  do
        print("666")
        a = a -1
    end
until a < 0

在这里插入图片描述

6. 运算符

操作符描述
+加法
-减法
*乘法
/除法
%取余
^
-数值符号取反
//整除运算
关系运算符描述
==等于
~=不等于
>大于
>=大于等于
<小于
<=小于等于
逻辑运算符描述
and逻辑与
or逻辑或
not逻辑非
特殊运算符描述
连接两个字符串
#计算字符串的长度
运算符优先级从高到低
^
not - (unary)
* / %
+ -
< > <= >= ~= ==
and
or

7. table表

表的构造

-- 初始化表
tab = {}
-- 指定值
tab[1] = "tomato"
--table简单的方法 remove
print(tab[1])
table.remove(tab, 1)
print(tab[1])

在这里插入图片描述

8. Redis调用lua脚本

EVAL script numkeys key [key …] arg [arg …]
script lua脚本
numkeys 键的数量
key 键可能会多个
arg 值可能会多个

eval "return KEYS[1]" 1 key
eval "return ARGV[1]" 0 value
eval "redis.call('set', KEYS[1], ARGV[1]);redis.call('expire', KEYS[1], ARGV[2]); return 1" 1 luatest 6666 5000

SCRIPT LOAD命令 和 EVALSHA命令
script load 脚本加载到redis服务端,并返回计算好的sha值
evalsha sha numkeys key [key …] arg [arg …]
evlasha redis服务端加载好的脚本的sha值 剩下的参数和eval的参数一致

eval d8158814dd6a7f25dc12946a89aac70b998ce750 1 luatest 6666 5000
指令和
eval "redis.call('set', KEYS[1], ARGV[1]);redis.call('expire', KEYS[1], ARGV[2]); return 1" 1 luatest 6666 5000
结果是一致的

SCRIPT EXISTS
用于判断lua脚本是否已在服务端加载过
SCRIPT FLUSH
清空Redis服务端所有加载过的lua脚本
SCRIPT KILL
杀死Redis服务端正在执行中的lua脚本
todo java三种客户端连接笔记记录好后再,完善这部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值