Lua 脚本中调用未知的 Redis 命令

我在 Lua 脚本中尝试使用"config get"命令获取一个 Redis 状态指标,但是得到了"Unknown Redis command called from Lua script"的错误提示,我不知道为什么?

127.0.0.1:6379> eval "return redis.call('config get','lazyfree_pending_objects')" 0
(error) ERR Error running script (call to f_4e7351811a87a6961eb6fe85622dce826bbc681c): @user_script:1: @user_script: 1: Unknown Redis command called from Lua script
127.0.0.1:6379> eval "return redis.call('config', 'get','lazyfree_pending_objects')" 0
(empty list or set)
127.0.0.1:6379> eval "return redis.call('config', 'get','used_memory_dataset')" 0
(empty list or set)
127.0.0.1:6379> eval "return redis.call('config', 'get used_memory_dataset')" 0
(error) ERR Error running script (call to f_25423fef37dc24142677d59a564f5b664f9e0f45): @user_script:1: ERR CONFIG subcommand must be one of GET, SET, RESETSTAT, REWRITE
点赞
用户5384363
用户5384363

你的代码有两个问题。

对于 config get xxxconfig 是命令, get 是子命令, xxx 是配置字段。因此,当您在 Lua 脚本中调用它时,应使用 redis.call('config', 'get', 'xxx')

如果您将其作为 redis.call('config get', 'xxx') 调用,则 Redis 将采用 config get 作为命令,这是一个未知命令。如果您将其作为 redis.call('config', 'get xxx') 调用,则 Redis 将采用 get xxx 作为子命令,这也是无效的。

另一个问题是 lazyfree_pending_objectsused_memory_dataset 不是配置,而是系统信息。您应该使用 INFO 命令。

2019-04-09 03:36:24
用户1012513
用户1012513

我之前也遇到了同样的问题。这个问题发生在我将 python redis==2.10.5 升级为 redis==3.5.3 之后。

我猜测这是因为 Redis 服务器(Linux 软件包)的版本不被最新的 python redis 软件包所支持。

我已经将 Linux Redis 服务器软件包升级至 4.0.9,并且它可以正常工作。

记得重新启动系统。

2020-06-29 10:10:38