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.html
使用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