如何从Redis Lua脚本输出到控制台?

Jas*_*ood 9 lua redis jedis

为什么这不打印'你好'?

$ redis-cli
127.0.0.1:6379> eval "print( 'hello' )" 0
(nil)
127.0.0.1:6379>
Run Code Online (Sandbox Code Playgroud)

在Mac OS X上运行2.8.14,在Windows 7上运行2.8.12.

我正在调用Jedis的Lua脚本.开发这些就像在船上装一个瓶子,戴着连指手套,而有人在打我的脸.我的最终目标是以某种方式通过打印跟踪语句,调试等来重新创建半功能开发堆栈.

我的解决方法是我的Lua脚本使用名为'log'的Redis列表,将其返回给Jedis,然后转储内容.有点像:

redis.call( 'del', 'log' )
redis.call( 'rpush', 'log', 'trace statement 1' )
redis.call( 'rpush', 'log', 'trace statement 2' )

...

redis.call( 'lrange', 'log', 0, -1 )
Run Code Online (Sandbox Code Playgroud)

提前感谢任何提示,帮助等.

更新:刚刚注意到'hello'通过终端窗口输出redis-server可执行文件.聪明.所以现在我为redis-server,redis-cli interactive和redis-cli监视器分别设置终端.

更新2:刚想通知我可以将跟踪语句打印到redis-cli监视器,如下所示:

eval "redis.call( 'echo', 'ugh')" 0
Run Code Online (Sandbox Code Playgroud)

看起来有点像这样:

123.456 [0 127.0.0.1:57709] "eval" "redis.call( 'echo', 'ugh')" "0"
123.456 [0 lua] "echo" "ugh"
Run Code Online (Sandbox Code Playgroud)

Jas*_*ood 12

面掌掌.终于想通了redis.log(loglevel,message).这也写入redis-server的控制台输出.

特别感谢有帮助的匿名选民.你是一个优秀的人类.

  • 我最近发布了这一系列方法,旨在帮助在Redis中跟踪和调试Lua - 希望它有所帮助:) https://redislabs.com/blog/5-methods-for-tracing-and-debugging- Redis的-LUA的脚本 (5认同)