【问题标题】:Unknown Redis command called from Lua script从 Lua 脚本调用的未知 Redis 命令
【发布时间】:2020-06-29 18:10:38
【问题描述】:

我尝试使用“config get”命令在lua中获取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

【问题讨论】:

    标签: redis lua


    【解决方案1】:

    我有同样的问题。在我将 python redis==2.10.5 升级到 redis==3.5.3 后,此问题开始出现。

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

    我已将 linux Redis 服务器包升级到 4.0.9 并且可以正常工作。

    记得重启系统。

    【讨论】:

    • 升级到 Redis 服务器版本 4.0.10 也对我有用。
    【解决方案2】:

    您的代码有 2 个问题。

    对于config get xxxconfig 是命令,get 是子命令,xxx 是配置字段。所以当你用 Lua 脚本调用它时,你应该使用redis.call('config', 'get', 'xxx')

    如果你称它为redis.call('config get', 'xxx'),Redis 将把config get 作为命令,这是一个UNKNOWN 命令。如果调用为redis.call('config', 'get xxx'),Redis 会将get xxx 作为子命令,同样无效。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2021-10-27
      • 2014-04-15
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多