gpt4 book ai didi

lua - 使用本地属性的 redis.call 错误

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

我在 Redis 上有一个数据库,其中包含以下先前的注册值:

person:1 {city city:1 }
city:1 {name Brasilia}

我有一个 Lua 脚本来获取给定人的城市名称:

redis.call("SELECT", 5)
local attribute = redis.call("HMGET", KEYS[1], ARGV[1])
local value = redis.call("HMGET", attribute, "name")
return value

KEYS[1] 应该有个人 key ,而 ARGV[1] 应该有那个人的属性,在那种特定情况下,我假设它是城市。

但是当我用命令执行脚本时:

$ redis-cli --eval redis_script.lua person:1 , city

我收到以下错误:

(error) ERR Error running script (call to f_8b79864f056e62eadd87b14b98e43c3457971911): @user_script:3: @user_script: 3: Lua redis() command arguments must be strings or integers

这意味着我在 redis.call 脚本的第 3 行出现错误,我认为这是因为“属性”值无效。所以我更改了脚本以找出“属性”的值:

redis.call("SELECT", 5)
local attribute = redis.call("HMGET", KEYS[1], ARGV[1])
return attribute

返回:

redis-cli --eval redis_script.lua person:1 , city
1) "city:1"

并再次更改为:

redis.call("SELECT", 5)
local attribute = redis.call("HMGET", KEYS[1], ARGV[1])
local value = redis.call("HMGET", "city:1", "name")
return value

这给了我:

redis-cli --eval another_test.lua person:1 , city
1) "Brasilia"

这就是我想要的。但我不明白为什么我的第一个代码在 redis.call 上出错,因为“属性”值是正确的,即“city:1”。

最佳答案

我想我刚刚发现了错误。在这里进行一些测试后,我在以下代码中发现了一个有趣的错误:

redis.call("SELECT", 5)
local attribute = redis.call("HMGET", KEYS[1], ARGV[1])
local message = "City: ".. " " ..attribute
return message

执行他:

redis-cli --eval test.lua person:1 , city
(error) ERR Error running script (call to f_03b059b49498769b0110c9f44765d1b769cb6976): @user_script:3: user_script:3: attempt to concatenate local 'attribute' (a table value)

引起我注意的是错误“...(表值)”的结尾。所以我更改了我的第一个代码以尝试将属性作为表访问:

redis.call("SELECT", 5)
local attribute = redis.call("HMGET", KEYS[1], ARGV[1])
local value = redis.call("HMGET", attribute[1], "name")
return value

这给了我:

redis-cli --eval redis_script.lua person:1 , city
1) "Brasilia"

所以碰巧我仍然没有正确理解Lua如何与Redis一起工作。起初它看起来 redis.call 返回一个字符串或整数形式的值,但看起来它不是那样的。我仍然不知道是不是因为我使用的是哈希,因为我使用 HSET 设置了 person:1 和 city:1,或者这就是 Lua with redis 的工作方式。

我希望这仍然能帮助那些遇到同样问题的人。

关于lua - 使用本地属性的 redis.call 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44287640/

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