Lua学习与Redis整合

Posted 恒哥~Bingo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua学习与Redis整合相关的知识,希望对你有一定的参考价值。

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

以上是关于Lua学习与Redis整合的主要内容,如果未能解决你的问题,请参考以下文章

Lua学习与Redis整合

Redis和Lua初步整合使用

Lua学习与Nginx整合

Lua学习与Nginx整合

Lua学习与Nginx整合

Redis学习笔记—Redis与Lua