2012-04-24 41 views
6

我試圖使用LPUSH將多個值推送到redis LIST。該代碼看起來是這樣的:Redis-rb通過redis.lpush推送數組將扁平化列表

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

的問題與上面的列表被夷爲平地,看起來像「1234」。在這種情況下,如何使用LPUSH將4個單獨元素推送到name陣列?

回答

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) } 
+0

難道就沒有辦法在一個推做到這一點? Redis 2.4應該支持多個值,而不是迭代循環並逐個插入。 – randombits 2012-04-24 17:47:16

+0

@randombits我沒有看到任何[Redis.rb方法](http://redis-rb.keyvalue.org/v2.2.0/Redis/Distributed.html)支持一組值。 – Phrogz 2012-04-24 18:15:10

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的寶石,你會有一些依賴性問題。最好等待國際海事組織正式交付。

0

採用V 3.0 +語法

r= Redis.new() 

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