Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis Lua脚本解包返回不同结果_Lua_Redis - Fatal编程技术网

Redis Lua脚本解包返回不同结果

Redis Lua脚本解包返回不同结果,lua,redis,Lua,Redis,通过运行sadd a b c进行设置 当我对集合a执行此代码时 KeyScoreClear1中只有一个值“b”。 keystClear2作为其中的两个值 local keystoclear = unpack(redis.call('smembers', KEYS[1])) redis.call('sadd', 'keystoclear1', keystoclear) redis.call('sadd', 'keystoclear2', unpack(redis.call('smembers'

通过运行sadd a b c进行设置

当我对集合a执行此代码时 KeyScoreClear1中只有一个值“b”。 keystClear2作为其中的两个值

local keystoclear = unpack(redis.call('smembers', KEYS[1]))

redis.call('sadd', 'keystoclear1', keystoclear)

redis.call('sadd', 'keystoclear2', unpack(redis.call('smembers', KEYS[1])))
我绝对不是lua专家,所以我可能会有一些奇怪的行为,但我想知道是什么导致了它

我使用redis cli和stackexchange.redis客户端在windows和linux版本的redis上进行了测试。所有情况下的行为都是一样的。这是一个简单的例子,我实际上想存储解包的结果,因为我需要用它执行几个操作

更新:我理解这个问题

Lua总是根据调用的情况调整函数的结果数。当我们将函数作为语句调用时,Lua会丢弃它的所有结果。当我们使用调用作为表达式时,Lua只保留第一个结果。只有当调用是表达式列表中的最后一个(或唯一)表达式时,我们才能得到所有结果


此案例与您在更新中引用的案例略有不同。在这种情况下,
解包
(可以)返回多个元素,但只存储一个元素并丢弃其余元素。如果使用
local keytoclear1,keytoclear2=…
,则可以获得其他元素,但存储表本身并根据需要解包要容易得多:

local keystoclear = redis.call('smembers', KEYS[1])
redis.call('sadd', 'keystoclear1', unpack(keystoclear))

只要
unpack
是最后一个参数,您就可以得到表中所有要解包的元素。

尝试调用
redis.call('sadd','keystClear1',(unpack(keystClear))
@moteus,这将为您提供
keystClear
中的第一个元素,这就是OP现在拥有的元素。