Redis-rb通过redis.lpush推送数组正在使列表变平

时间:2012-04-24 17:35:10

标签: ruby redis

我正在尝试使用LPUSH将多个值推送到redis LIST。代码看起来像这样:

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

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

3 个答案:

答案 0 :(得分:2)

您可能需要查看:

Redis-rb 2.2.2版不支持可变参数命令。它们已经在3.0版本中推出,但还没有交付。

在variadic parameters命令中没有特定的方法来处理数组。您的代码可能适用于3.0版。

与此同时,我建议你使用如下的管道:

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

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

如果您真的想使用variadic parameters命令,可以使用以下命令轻松安装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,您将遇到一些依赖性问题。最好等待正式交付IMO。

答案 1 :(得分:0)

你可以这样做:

# 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) }

答案 2 :(得分:0)

使用v 3.0 +语法

r= Redis.new()

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