我需要在redis中随时迭代ring,我有这个Lua脚本:
local result = redis.call('lrange','test',0,5)
redis.call('ltrim','test',5,-1)
redis.call('rpush','test',result)
return result
在这里,我对5个元素进行lpop
编码,然后需要对它们进行rpush
编码。redis.call('rpush','test',result)
抛出错误Lua redis() command arguments must be strings or integers
,所以我需要像Lua中的...result
这样的JavaScript。
最佳答案
我认为您可以为此使用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"
关于redis - 如何在Lua脚本中将…array传递给redis rpush?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63151268/