gpt4 book ai didi

lua - redis脚本检查哈希字段是否存在

转载 作者:可可西里 更新时间:2023-11-01 11:15:29 27 4
gpt4 key购买 nike

问题是关于redis中的lua脚本

我正在尝试检查某个字段是否存在于哈希表中,但是 redis.call 的返回值让我感到惊讶:

    EVAL 'local label = "oooo"; local tesid = redis.call("HGET", "nosuchkey", "nosuchfield"); if tesid == nil then label="aaaa" elseif tesid == "" then label="bbbb" else label = "kkkk" end; return {tesid,label}' 0

返回值为

    1) (nil)
2) "kkkk"

我不明白为什么我会进入 else 分支——其中 label 设置为 "kkkk"——当 tesid是nil,我认为它应该输出"aaaa"

为什么脚本进入"kkkk"标签?

为了更好的阅读,我把脚本贴在这里:

    local label = "oooo"
local tesid = redis.call("HGET", "nosuchkey", "nosuchfield")
if tesid == nil
then
label="aaaa"
elseif tesid == ""
then
label="bbbb"
else
label = "kkkk"
end
return {tesid,label}

最佳答案

简答: tesidfalse NOT nil

Redis对nil回复的转换规则如下:

  1. Redis nil 回复转换为 Lua false boolean 类型。
  2. Lua false boolean类型转换为Redis的nil回复。

在您的情况下,HGET 返回 nil,它被转换为 false。所以 tesidfalse。它不等于 nil"",因此 label 设置为 kkk。当您的代码返回 tesid 作为返回值的一部分时,它会转换为 Redis 的 nil 回复。这就是为什么你有 {nil, kkk}

关于lua - redis脚本检查哈希字段是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49771476/

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