调试 Redis lua脚本

前言

如果想用Redis实现一些进阶功能的话,lua脚本可能是一个绕不开的话题。

Redis从2.6开始加入了对Lua脚本的支持,可以说Lua脚本的加入极大的拓展了Redis功能。使用Lua脚本至少有以下两个好处:

  1. 将复杂的Redis存取逻辑与业务代码独立开
  2. 更好的事务性能

Redis从3.2版本开始提供了一个完整的lua脚本调试器。本文将介绍如何使用redis-cli运行lua脚本。

允许远程连接Redis

如果本机安装了redis可以直接访问127.0.0.1连接,如果要连接远程Redis则需要确保Redis允许其它IP访问。

  1. 首先找到redis.conf文件,一般是在/etc文件夹下

  2. 找到bind 127.0.0.1这一行,改成0.0.0.0

  3. 指定配置文件重启redis服务redis-server /etc/redis.conf

redis-cli运行lua脚本命令

redis-cli -h {redis_host} -p {redis_port} -a {redis_password} -n {database} --ldb eval /path/to/script keys [key1 key2 key3…] , args [argv1 argv2 argv3…]

参数说明必需示例
redis_host需要连接的redis ip127.0.0.1
redis_port需要连接的redis端口6379
redis_passwordredis密码123456
database需要操作的redis db10
因为Redis版本不同,命令可能会有些不同
`redis-cli -h {redis_host} -p {redis_port} -a {redis_password} -n {database} --ldb --eval  /path/to/script keys [key1 key2 key3…] , args [argv1 argv2 argv3…]`

其中key 与argv之间用,分开,注意,两边都要加空格。

示例

先准备一个示例lua脚本:

-- 接收2个Key
local key1 = KEYS[1]
local key2 = KEYS[2]

-- 接收2个参数
local v1 = ARGV[1]
local v2 = ARGV[2]

-- 操作数据
redis.call('hincrby', key1, v1, 1)
redis.call('hincrby', key2, v2, -1)

运行命令

redis-cli -h 127.0.0.1 -p 6379 -a 123456 -n 1 --ldb --eval demo.lua h:t:1 h:t:2 , f1 f2

我们会进入到lua脚本调试器,逐行运行脚本。

Lua debugging session started, please use:
quit    -- End the session.
restart -- Restart the script in debug mode again.
help    -- Show Lua script debugging commands.

* Stopped at 1, stop reason = step over
-> 1   local key1 = KEYS[1]
lua debugger> n
* Stopped at 2, stop reason = step over
-> 2   local key2 = KEYS[2]
lua debugger> n
* Stopped at 4, stop reason = step over
-> 4   local v1 = ARGV[1]
lua debugger> n
* Stopped at 5, stop reason = step over
-> 5   local v2 = ARGV[2]
lua debugger> n
* Stopped at 7, stop reason = step over
-> 7   redis.call('hincrby', key1, v1, 1)
lua debugger> n
<redis> hincrby h:t:1 f1 1
<reply> 1
* Stopped at 8, stop reason = step over
-> 8   redis.call('hincrby', key2, v2, -1)
lua debugger> print v1
<value> "f1"
lua debugger> n
<redis> hincrby h:t:2 f2 -1
<reply> -1
* Stopped at 10, stop reason = step over
-> 10  <out of range source code line>
lua debugger> n

(nil)

(Lua debugging session ended -- dataset changes rolled back)

使用n可以运行当前语句,使用print打印变量值。

总结

本文介绍了如何使用redis-cli调试lua脚本及基础操作,囿于篇幅,redis的lua脚本调试器还有一些实用的指令未能在本文介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值