Setup, indem a b cRedis Lua Script auspacken Rückkehr Unterschiedliche Ergebnisse
sadd läuft, wenn ich diesen Code ausführen gegen das Set ein keystoclear1 einen einzigen Wert von "b" in sich hat. keystoclear2 als beide Werte drin.
local keystoclear = unpack(redis.call('smembers', KEYS[1]))
redis.call('sadd', 'keystoclear1', keystoclear)
redis.call('sadd', 'keystoclear2', unpack(redis.call('smembers', KEYS[1])))
ich nicht bin: ein lua-Experten, so konnte ich nur hier ein seltsames Verhalten, aber ich würde gerne wissen, was es verursacht.
Ich testete dies sowohl in der Windows- als auch in der Linux-Version von redis, mit redis-cli und dem Stackexchange.redis-Client. Gleiches Verhalten in allen Fällen. Dies ist ein triviales Beispiel, ich möchte eigentlich die Ergebnisse des Entpackens speichern, da ich mehrere Operationen damit durchführen muss.
UPDATE: Ich verstehe das Problem.
table.unpack() only returns the first element
Lua stellt immer die Anzahl der Ergebnisse aus einer Funktion zu den Umständen des Anrufs. Wenn wir eine Funktion als Anweisung aufrufen, verwirft Lua alle seine Ergebnisse. Wenn wir einen Aufruf als Ausdruck verwenden, behält Lua nur das erste Ergebnis. Wir erhalten alle Ergebnisse nur dann, wenn der Aufruf der letzte (oder einzige) Ausdruck in einer Liste von Ausdrücken ist.
versuchen Sie es mit 'redis.call ('sadd', 'keystoclear1', (entpacken (keystoclear))) – moteus
@moteus, das wird Ihnen nur das erste Element in' keystoclear' geben, was das OP jetzt hat . –