前言
Redis自2.6.0版本开始内置Lua解释器。
Lua,轻量级脚本语言,号称最快的脚本语言。
两者结合将爆发出巨大的威力。
简介
Redis Lua脚本可以调用原生的Redis命令,也可以包含自定义的控制流、逻辑运算、数学运算等,将复杂的业务逻辑封装起来,形成一个原子事务。
这些特性使我们可以自由地扩展Redis,封装“自定义命令”。
与MULTI+EXEC对比
使用MULTI+EXEC及相关组合命令,也可以将多个命令封装成事务,但灵活性不如Lua脚本。
除此之外,MULTI+EXEC需要多次向Redis server发送事务命令,每次发送都会有RTT(Round Trip Time)消耗,性能低于Lua脚本。
Redis Lua Scripts Debugger (LDB)
Redis自3.2版本开始包含LDB,用于调试Lua脚本。
LDB支持设置断点,逐行执行等。
一个简单的例子
执行set命令,并设置新的ttl
编写Lua脚本,文件名为set_ttl.lua
local set_msg = false
-- 执行redis命令的返回结果被封装成了table,形如{'ok':'OK'}
local key_type = redis.call('TYPE' , KEYS[1])['ok']
-- key的数据类型为string或key不存在时,继续执行
if key_type == 'string' or key_type == 'none' then
local ttl = tonumber(ARGV[2])
set_msg = redis.call('SET', KEYS[1], ARGV[1], 'EX', ttl)['ok']
end
return set_msg -- 正常情况下会返回"OK"