【问题标题】:How do I pass ...array to redis rpush inside Lua script?如何在 Lua 脚本中将 ...array 传递给 redis rpush?
【发布时间】:2020-11-18 21:44:35
【问题描述】:

我需要在 redis 中随时迭代 ring,我有这个 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() command arguments must be strings or integers,所以我需要像 Lua 中的 ...result 这样的 JavaScript。

【问题讨论】:

    标签: redis lua node-redis


    【解决方案1】:

    我认为您可以为此使用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"
    

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 2017-05-23
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 2011-11-10
      相关资源
      最近更新 更多