設置通過運行SADD A B CRedis的Lua的腳本拆開返回不同的結果
當我靠在設置 keystoclear1中有「b」的一個單一的值執行該代碼。 keystoclear2作爲它的兩個值。
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上測試了這個。在所有情況下都是一樣的。這是一個微不足道的例子,我實際上想要存儲unpack的結果,因爲我需要對它執行幾個操作。
更新:我明白這個問題。
table.unpack() only returns the first element
的Lua總是調整結果的數量從一個函數調用的情況。當我們調用一個函數作爲一個語句時,Lua放棄了它的所有結果。當我們將一個調用用作表達式時,Lua只保留第一個結果。只有當調用是表達式列表中的最後(或唯一)表達式時,我們纔會獲得所有結果。
嘗試調用''redis.call('sadd','keystoclear1',(unpack(keystoclear)))' – moteus
@moteus,這會給你'keystoclear'中的第一個元素,這是OP現在的功能。 –