gpt4 book ai didi

lua - 在 Redis/Lua 脚本中使用 TYPE 命令

转载 作者:IT王子 更新时间:2023-10-29 05:55:45 26 4
gpt4 key购买 nike

我正在尝试使用 Redis TYPE Lua 脚本中的命令(通过 EVAL 执行)

local key_type = redis.call("TYPE", key)

根据Redis的文档,这应该返回一个"none""zset"等的字符串

但是返回值的类型是lua table。将值与字符串进行比较总是返回 false。

我已经设法通过将调用更改为

来解决这个问题
local key_type = redis.call("TYPE", key)["ok"]

这个值确实是一个字符串并且在字符串比较命令中起作用。我担心这是我特定版本的 Redis 中的一个错误,当我升级时它会在未来的版本中中断。

有谁知道这是预期的行为还是错误?

最佳答案

TYPE命令返回一个状态回复(也就是一个简单的字符串),例如"+list\r\n"

在 Redis 脚本方面,callluaRedisCallCommand 实现它在幕后执行真正的 Redis 命令。

一旦成功执行,此函数将命令结果转换为redisProtocolToLuaType。 .

当遇到状态回复时,此函数创建一个 Lua 表,以 "ok" 为键,状态回复为值(参见 redisProtocolToLuaType_Status)。所以:

  • 没有错误,
  • 这就是为什么 redis.call("TYPE", key) 是一个表(因此您需要获取 "ok" 键的值,因为做了,以获取 key 的字符串类型)。

注意:当您直接返回表时,Redis 会注意获取与 “ok” 键关联的值,并将其作为状态回复返回,例如:

> EVAL 'return redis.call("TYPE", "foo")' 
set

查看此 code section了解更多详情。

关于lua - 在 Redis/Lua 脚本中使用 TYPE 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21435315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com