Lua
Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由 Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo 所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua 由标准 C 编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua 并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的 JIT 项目,提供在特定平台上的即时编译功能
Redis 中使用 LUA 的好处
1)减少网络开销,在 Lua 脚本中可以把多个命令放在同一个脚本中运行。
2)原子操作,Redis 会将整个脚本作为一个整体执行,中间不会被其他命令插入。换句话说,编写脚本的过程中无需担心会出现竞态条件。
3)复用性,客户端发送的脚本会永远存储在 Redis 中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑。
Redis中使用lua基本语法
1EVAL script numkeys key [key ...] arg [arg ...]
参数说明
1
2
3(1)script即为lua脚本或lua脚本文件
(2)key一般指lua脚本操作的键,在lua脚本文件中,通过KEYS[i]获取
(3)arg指外部传递给lua脚本的参数,可以通过ARGV[i]获取
redis客户端使用 eval 执行lua脚本
1
2127.0.0.1:6379> eval 'local val=ARGV[1].." "..KEYS[1] return val' 1 jerry hello
"hello jerry"
结合redis,通过redis.call()调用redis的命令
1
2
3
4127.0.0.1:6379> set name tom
OK
127.0.0.1:6379> eval 'local val=ARGV[1].." "..redis.call("get",KEYS[1]) return val' 1 name hello
"hello tom"
结合redis传递多个参数,其中..表示连接字符串
1
2
3
4
5
6
7127.0.0.1:6379> set name tom
OK
127.0.0.1:6379> set name2 jack
OK
127.0.0.1:6379> eval 'local val=ARGV[1].." "..redis.call("get",KEYS[1])..";"..ARGV[2].." "..redis.call("get",KEYS[2]) return val' 2 name name2 hi hello
"hi tom;hello jack"