Lua For Redis-你认识他吗?

106 阅读3分钟

15a642b6643f3e2a.webp

Lua 短小精悍,你确定不来个入门吗?本文是为了后续使用lua脚本实现基于Redis分布式锁准备的扫盲篇,欢迎一起讨论❤️

Lua是什么

  • Lua是一个强大的、高效的、轻量级、可嵌入的脚本语言
  • 它支持过程编程、面向对象编程、函数式编程、数据驱动编程和数据描述
  • Lua结合了简单的过程语法和基于关联数组和可扩展语义的强大数据描述结构
  • Lua是动态类型的,通过使用基于寄存器的虚拟机解释字节码来运行,并且具有自动内存管理和增量垃圾收集,使其成为配置、编写脚本和快速原型的理想选择。
  • Lua在性能方面享有应有的声誉。声称“和Lua一样快”是其他脚本语言的愿望
  • 几个基准测试表明Lua是解释性脚本语言领域中最快的语言。Lua不仅在经过微调的基准测试程序中速度很快,在现实生活中也是如此。大部分大型应用程序都是用Lua编写的

Lua由来

  • Lua是由pu -Rio(巴西里约热内卢天主教大学)的一个团队设计、实现和维护的
  • Lua出生并成长于Tecgraf(原pu - rio的计算机图形技术组)
  • Lua现在被安置在LabLua实验室,是芝加哥大学计算机科学系的一个实验室
  • Lua(发音为LOO-ah)在葡萄牙语中的意思是“月亮”。因此,它既不是首字母缩写也不是缩写,而是一个名词。
  • 更具体地说,“Lua”是一个名字,是地球月球的名字,也是语言的名字。
  • 像大多数名字一样,它应该用小写字母大写,即“Lua”。请不要把它写成“LUA”,这样既难看又容易混淆,因为这样它就变成了一个首字母缩略词,对不同的人有不同的含义。所以,请把“Lua”写对😊

Lua发展史

  • 1993年,在第七届巴西软件工程研讨会上发表的关于Lua的首次公开演讲。Lua 1.0启动并运行
  • 1994年,在第21届巴西软件和硬件研讨会上发表的第一篇描述Lua的论文。发布Lua 1.1。这是Lua的第一个公开发行版
  • 1995年,Lua2.2发布
  • 1996年,Lua2.5发布
  • 1997年,Lua3.0发布,关于Lua的论文获得第二届康柏计算机科学研究与发展奖一等奖(技术类)
  • ...
  • 2023年,Lua5.4.6发布,不知道大家发现没有,今年是Lua的30周年纪念日哦

Lua的一些基础语法

  • 循环语法,end结尾
while(条件)  
do  
   xxx
end
  • 流程控制语法,end结尾
if(条件)
then  
    xxx
elseif(条件)
then 
    xxx
else 
    xxx
end

Redis中使用Lua的优势

  • 不废话,了解了发展史和是什么之后,我们直接开工,在redis中使用Lua脚本,看给我们提供了什么便利
  • 减少网络的占用,Lua可以将一串Redis命令通过脚本形式一次性处理
  • 原子操作,这一串Redis命令可以当作一个整体被执行,命令中间不会被打断,这是后面实现基于Redis分布式锁的基础。

Redis中使用Lua实操

  • 语法格式
//script:脚本字符串
//numkeys:参数的个数,脚本中的参数可以通过外部指定,类似sql的preparedstatement
//[key [key ...]] [arg [arg ...]]  这个就是参数,k-v键值对的形式
eval script numkeys [key [key ...]] [arg [arg ...]]
  • 调用redis的方式
    • redis.call:当调用发生错误时,自动终止脚本,强制把相关Lua 错误返回给客户端
    • redis.pcall:当调用发生错误时,会进行错误拦截,并返回相关错误
  • 示例

image.png