如果想用Redis实现一些进阶功能的话,lua脚本可能是一个绕不开的话题。
Redis从2.6开始加入了对Lua脚本的支持,可以说Lua脚本的加入极大的拓展了Redis功能。使用Lua脚本至少有以下两个好处:
Redis从3.2版本开始提供了一个完整的lua脚本调试器。本文将介绍如何使用redis-cli
运行lua脚本。
如果本机安装了redis可以直接访问127.0.0.1连接,如果要连接远程Redis则需要确保Redis允许其它IP访问。
首先找到redis.conf
文件,一般是在/etc
文件夹下
找到bind 127.0.0.1
这一行,改成0.0.0.0
指定配置文件重启redis服务redis-server /etc/redis.conf
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 ip | 是 | 127.0.0.1 |
redis_port | 需要连接的redis端口 | 是 | 6379 |
redis_password | redis密码 | 否 | 123456 |
database | 需要操作的redis db | 否 | 10 |
因为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脚本调试器还有一些实用的指令未能在本文介绍。