Lua脚本
**简介:**Lua是一种功能强大的,高效,轻量级,可嵌入的脚本语言。它是动态类型语言,通过使用基于寄存器的虚拟机解释字节码运行,并具有增量垃圾收集的自动内存管理,是配置,脚本和快速原型设计的最佳选择
Redis中使用lua脚本的原因
-
减少网络延迟:Lua脚本将多个Redis命令组合成一个脚本,减少了客户端与服务器之间的网络交互。同时,Redis服务器还提供了EVALSHA命令,可以将脚本的SHA1值缓存在服务器中,下次再执行同样的脚本时,只需传递SHA1值即可,减少了网络传输时间。
-
原子操作:Lua脚本可以保证多个Redis命令的原子性,避免了并发问题
Redis怎么执行Lua脚本
1、lua函数
Lua脚本使用两个不同的Lua函数来调用任意的Redis命令
redis.call()
redis.pcall()
当redis命令执行结果返回错误时
-
call()
将返回给调用者一个错误, -
pcall()
将捕获的错误以Lua表的形式返回
127.0.0.1:6379> EVAL "return redis.call('xxxx')" 0
(error) ERR Error running script (call to f_1e6efd00ab50dd564a9f13e5775e27b966c2141e): @user_script:1: @user_script: 1: Unknown Redis command called from Lua script
127.0.0.1:6379> EVAL "return redis.pcall('xxxx')" 0
(error) @user_script: 1: Unknown Redis command called from Lua script
2、脚本执行
Redis Lua脚本可以通过 EVAL
命令或者 EVALSHA
命令执行
EVAL script numkeys [key [key ...]