Lua脚本简介
Redis 在 2.6 版本中推出了脚本功能,允许开发者将 Lua 语言编写的脚本传到 Redis 中执行。使用 Lua 脚本的优点有如下几点:
- 减少网络开销:本来需要多次请求的操作,可以一次请求完成,从而节约网络开销;
- 原子操作:Redis 会将整个脚本作为一个整体执行,中间不会执行其它命令;
- 复用:客户端发送的脚本会存储在 Redis 中,从而实现脚本的复用。
Redis执行Lua脚本
使用redis-cli登录Redis后就可以执行脚本
简单的Lua脚本
eval "return 9+9" 0
eval 命令用于执行脚本
双引号括起来的就是脚本
0 代表脚本参数个数为0
带参数的脚本
EVAL "local msg='hello ' return msg..KEYS[1]" 1 zhangsan
KEYS[1]从参数表中获得第一个参数值 zhangsan
Lua脚本文件
执行脚本文件
可以把Lua脚本单独保存到文件中,通过–eval命令执行
redis-cli --eval 脚本文件路径 参数...
Lua调用Redis命令
Lua脚本文件中可以调用Redis命令
- redis.call(“命令”)
- redis.pcall(“命令”)
call和pcall的区别是:call会直接抛出错误,pcall会将错误信息打印出来
test.lua脚本文件
-- 通过KEYS读取两个Lua的参数
local key=KEYS[1]
local value=KEYS[2]
-- 调用redis的set命令
redis.call("set",key,value);
-- 调用incr命令自增1
redis.call("incr",key);
-- 调用get命令
local get = redis.call("get",key);
return get;
调用脚本
redis-cli --eval test.lua count,99
Redis管理脚本
Redis通过下面命令管理Lua脚本
- script load 此命令用于将Lua脚本加载到Redis内存中
- script exists scripts exists sha1 [sha1 …] 此命令用于判断sha1是否已经加载到Redis内存中
- script flush 此命令用于清除Redis内存已经加载的所有Lua脚本
- script kill 此命令用于杀掉正在执行的Lua脚本
load命令可以得到sha1值
redis-cli script load "$(cat test.lua)"
通过sha1值执行命令,2是参数个数,后面是参数值
redis-cli evalsha "2c52d695c89fd89c01bdeecd2211a31f3c1c20ca" 2 count 99
|