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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值