redis - 如何在Lua脚本中将…array传递给redis rpush?

标签 redis lua node-redis

我需要在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/

相关文章:

redis 使用 KEYS 的数字范围

c++ - 具有libev和自定义事件循环的C++ libhiredis

lua - lua-redis脚本出错

node.js - redis hget 在代码片段中返回 null 但在 redis-cli 中有效

json - 操作 Redis JSON 中的嵌套对象数组

python-rq Queue.job_ids 始终为空

java - Redis中的notify-keyspace-events是什么

Lua:使用字符串键创建隐式表 - 为什么要额外的括号?

lua - 无法链接最小的 Lua 程序

javascript - 处理异步 Node redis 函数,同时在两个键上使用 INCR 很尴尬