调试
调试 Redis Stack 函数的方法
概述
您可以使用两种方法调试 Redis Stack 函数
- 明智地使用
redis.log
函数,该函数写入 Redis 日志文件。 - 使用 Redis 发布/订阅。
使用 redis.log
如果您有权访问 Redis 日志文件,redis.log
是调试时一个不错的选择。但是,它也存在缺点。Redis Cloud 用户无法访问 Redis 日志文件,并且在自托管安装中,通常只有系统管理员才能访问它们。幸运的是,您也可以使用 Redis 发布/订阅,我们将在下一节中讨论。
使用 redis.log
不需要任何特殊操作,它始终可用。以下是一个示例
#!js api_version=1.0 name=lib
redis.registerFunction('hello', ()=> {
redis.log('Hello log')
return 'Hello from an external file'
})
在加载库并使用 TFCALL
执行函数后,您将在 Redis 日志文件中看到类似以下内容
45718:M 01 Nov 2023 07:02:40.593 * <redisgears_2> Hello log
使用 Redis 发布/订阅
如果您无法访问 Redis 数据库日志文件,则可以使用发布/订阅。以下示例演示了如何使用 client.call API 发布到发布/订阅频道。
#!js api_version=1.0 name=lib
const logChannel = 'tfLogChannel'
function publog(client, message) {
client.call('publish', logChannel, message)
}
redis.registerFunction('tflog', (client) => {
publog(client, 'sample pub/sub log message')
return 'sample'
})
在 CLI 会话中,订阅 tfLogChannel
频道并观察消息。
$ redis-cli
127.0.0.1:6379> subscribe tfLogChannel
1) "subscribe"
2) "tfLogChannel"
3) (integer) 1
Reading messages... (press Ctrl-C to quit or any key to type command)
在另一个 CLI 会话中,加载库,替换现有内容,然后调用新函数
127.0.0.1:6379> TFCALL lib.tflog 0
"sample"
您将在之前的 CLI 会话中看到以下内容
1) "message"
2) "tfLogChannel"
3) "sample pub/sub log message"
使用发布/订阅有一个缺点。Redis 发布/订阅提供最多一次的消息传递语义,这意味着消息一旦发送就不会再次发送。因此,如果消息没有被消费,它就永远消失了。这对于调试来说可能没什么问题,但从长远来看,redis.log
是日志持久化的更好解决方案。