Redis进阶:Lua初尝试

Lua是一门脚本语言,可以编写Lua脚本到Redis中执行

 如果需要需要调试Lua脚本,可以到Lua官网下载Lua,然后在本地cmd控制台来调试命令

 

【使用Lua脚本的优点】

1.减少网络开销。Redis每条命令都需要进行网络传输,特别是命令条数很多的情况。

2.原子操作。脚本都会作为一个整体执行,中间不会有其他命令插入。

3.复用。会永远存储在Redis中

比较类似Sql里面的存储过程

 

【Lua数据类型】

1.空类型 nil

2.布尔类型 boolean

3.数字类型 number

4.字符串类型  string

5.表类型  table。  既可以当数组也可以当字典

6.函数类型 function。

 

【Lua变量】

分为全局变量和局部变量。

注意:全局变量没有声明和未声明之分,只有nil和非nil之分

删除全局变量的方法就是将它赋值为nil

 

局部变量和全局变量的区别是局部变量声明时需要加上一个local

比如

//全局变量
a=2

//局部变量
local  b=2

局部变量和全局变量默认都为nil。

 

【变量声明要求】

1.不能数字开头

2.只能包含字母,数字和下划线

3.不能和关键字相同

 

【注释】

--单行注释

--[[
    多行注释
]]

 

【赋值】

一一对应原则

local  a, b=1, 2    --这里a=1,b=2
local  c,d=1,2,3    --这里c=1,d=2,3被舍弃
lcoal  e,f=1          --这里e=1,f=nil

 

注意:

Lua处理表达式时,会先计算值

例如

local a={2,3,4}
local  i=1
local i,a[i]=i+1,5

第三行遇到表达式,会先将i=1带入,所以原式变为

local  i,a[1]=2,5

所以

a={5,3,4}

 

【操作符】

1.注意:如果字符串是数字,那么和数字相加会输出数字之和

print('1'+1)

会输出2,与其他语言相反,其他语言会转化成字符串,输出11

 

2.不等于的写法为  ~=

 

3.注意:虽然字符串的内容是数字时可以直接和数字相加,但不代表两者相等,比如

print('1'==1)

这个表达式是false,如果想要比较的话,应该将字符串转化成数字

print(1==tonumber('1'))
或者
print(tostring(1)=='1')

 

【逻辑运算】

注意:

1.操作符的运算与其他语言不同

not :  根据操作数真假返回false和true

对于a  oper   b

and :  a为真则返回b,为假则返回a

or :  a为真则返回a,为假则返回b

 

2.对于操作数而言,只要不为nil或者false就认为是真

0和空字符也认为是真。

 

3.逻辑操作符支持短路。也就是false  and  foo(),则一定会返回false

 

4.连接操作符是 ..(其他语言一般是+)

比如

print('hello'..' '..'world')      --hello world

 

6.取长度运算符#

print(#'hello')     --5

 

7.if语句

表达式为

if   条件   then
 语句块
elseif 条件 then
 语句块
else
 语句块
end

 

注意:

在Redis中exists指令的返回值1和0分别代表存在或者不存在。但在Lua指令中1和0全为真

所以判断一个键是否存在的Lua指令不能写成

if  redis.call('exists','key')  then
   exists=true
..

上面的表达式恒为真,应该写成

if  redis.call('exists','key')==1  then
   exists=true
..

 

8.循环语句

while 条件 do
  语句块
end

repeat:

repeat  
 语句块
until  条件

for:

for   变量=初值,终值,步长  do
   语句块
end

步长默认为1,可以省略

实例

local  sum=0
for i=1,100 do
  sum=sum+i
end

 

posted @   RookieCoderAdu  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示