lua脚本学习

因为项目中使用到lua脚本特来学习学习基本用法;

Redis中对lua脚本的介绍

https://redis.io/commands/eval/

Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

lua脚本特点

简单的说Lua语言是一个可扩展的嵌入型的脚本语言。它具有以下的特点:

  • 嵌入式语言: 它是ANSI C实现,在大多数 ANSI C 编译器中无需更改即可编译,包括 gcc(在 AIX、IRIX、Linux、Solaris、SunOS 和 ULTRIX 上)、Turbo C(在 DOS 上)、Visual C++(在 Windows 3.1/95/NT 上)、Think C (MacOS) 和 CodeWarrior (MacOS)。基本上每种编程语言都有调用 C 函数的方法,因此您可以在所有这些语言中使用 Lua。 这包括 C++、Go、Rust、Python、……
  • 解释型语言:Lua脚本会先编译成字节码,然后在Lua虚拟机上解释执行这些字节码。保证了它的可移植性
  • 动态类型语言:Lua语言本身没有定义类型,不过语言中的每个值都包含着类型信息
  • 简洁轻量,运行速度快:它所有的实现不到6000行 ANSI C代码。只包括一个精简的核心和最基本的库,较新的5.4.3版本解释器编译后283kB(Linux,amd64)。同时Lua通常被称为市场上最快的脚本级 HLL 语言
  • 设计原则遵循尽量使用机制来代替规则约定: Lua语言中包含的机制有模块管理、自动垃圾收集、元表和元方法、引用机制等。这些机制下面会详细介绍

Eval基本语法:

https://www.runoob.com/redis/scripting-eval.htmllua脚本乱码 lua脚本编辑_学习

使用Eval执行Redis命令:

eval 表示这是个lua脚本;

双引号里面的表示脚本内容;

后面数字代表后面有几个参数;1代表后面一个变量 2代表后面2个变量 使用的时候

向redis里面添加一个key:name value:xiaoming

eval "return redis.call('set',KEYS[1],KEYS[2])" 2 name xiaoming

redis中取一个key是name的value

eval "return redis.call('get',KEYS[1])" 1 name

删除key是name的value

eval "return redis.call('del',KEYS[1])" 1 name

Zset类型的有序集合 action_123 score:2 value:zset_value

eval "return redis.call('ZADD',KEYS[1],KEYS[2],KEYS[3])" 3 action_zset  2 zset_value

key添加或修改过期时间

eval "return redis.call('EXPIRE',KEYS[1],KEYS[2])" 2 action_zset  100

模糊查询key w3c开头的key

eval "return redis.call('KEYS',KEYS[1])" 1 w3c*

以毫秒为单位返回 key 的剩余的过期时间。

eval "return redis.call('PTTL',KEYS[1])" 1 w3ckey