【问题标题】:Redis-rb pushing an array via redis.lpush is flattening the listRedis-rb 通过 redis.lpush 推送数组正在展平列表
【发布时间】:2012-05-05 09:25:53
【问题描述】:

我正在尝试使用 LPUSH 将多个值推送到 redis LIST。代码如下所示:

mylist = ["1", "2", "3", "4"]
$redis.lpush(name, mylist)

上面的问题是列表被展平,看起来像“1234”。在这种情况下如何使用 LPUSH 将 4 个单独的元素推送到 name 数组?

【问题讨论】:

    标签: ruby redis


    【解决方案1】:

    v 3.0 + 的语法是

    r= Redis.new()
    
    r.lpush("mylist", ["element1", "element2" , "element3"])
    

    【讨论】:

      【解决方案2】:

      你可能想看看:

      Redis-rb 2.2.2 版不支持可变参数命令。它们已在 3.0 版中引入,但尚未交付。

      在可变参数命令中没有具体的处理数组的方法。您的代码可能适用于 3.0 版。

      同时,我建议您使用如下管道:

      name = "toto"
      mylist = [ 1,2,3,4,5 ]
      $redis.pipelined{ mylist.each{ |x| $redis.lpush(name,x) } }
      

      使用管道,往返次数将与使用可变参数命令相同。

      如果您真的想使用可变参数命令,您可以使用以下命令轻松安装 3.0 的预发布版本:

      gem install --prerelease redis
      gem list redis 
      
      *** LOCAL GEMS ***
      redis (3.0.0.rc1, 2.2.2)
      

      并在您的脚本中使用以下命令激活它:

      gem 'redis', '3.0.0.rc1'
      require 'redis'
      

      请注意,如果你有其他依赖于 redis gem 的 gem,你会遇到一些依赖问题。还是等IMO正式发货吧。

      【讨论】:

        【解决方案3】:

        你可以这样做:

        # If you want ["1","2","3","4",...restofarray...]
        mylist.reverse.each{ |v| $redis.lpush(name,v) }
        
        # If you want ["4","3","2","1",...restofarray...]
        mylist.each{ |v| $redis.lpush(name,v) }
        

        【讨论】:

        • 有没有办法一键搞定? Redis 2.4 应该支持多个值被推送而不是在一个循环中迭代并一个一个地插入它们。
        • @randombits 我没有看到任何支持值数组的method for Redis.rb
        猜你喜欢
        • 2012-02-08
        • 2013-06-24
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 2016-10-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多