如何在 Lua 脚本中将数组传递给 Redis rpush?

我需要在 Redis 中迭代环形结构多次,我有这个 Lua 脚本:

local result = redis.call('lrange','test',0,5)
redis.call('ltrim','test',5,-1)
redis.call('rpush','test',result)
return result

在这里,我使用 lpop 弹出了 5 个元素,然后需要将它们 rpush 回去。

redis.call('rpush','test',result)

会抛出错误“Lua redis() 命令参数必须是字符串或整数”,所以我需要类似 JavaScript 中的 ...result 的方法来解决。

点赞
用户2188922
用户2188922

我认为你可以在此使用 unpack

local result = redis.call('lrange','test',0,5)
redis.call('ltrim','test',5,-1)
redis.call('rpush','test',unpack(result))
return result

当调用 lrange 时,如果你想保持列表大小不变,你可能需要使用 4(而不是 5)。这里是执行 4 的示例演示:

127.0.0.1:6379> rpush test a b c d e f
(integer) 6
127.0.0.1:6379> "EVAL" "local result = redis.call('lrange','test',0,4) redis.call('ltrim','test',5,-1) redis.call('rpush','test',unpack(result)) return result" "0"
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> lrange test 0 -1
1) "f"
2) "a"
3) "b"
4) "c"
5) "d"
6) "e"
2020-07-29 10:34:25