我試圖使用LPUSH將多個值推送到redis LIST。該代碼看起來是這樣的:Redis-rb通過redis.lpush推送數組將扁平化列表
mylist = ["1", "2", "3", "4"]
$redis.lpush(name, mylist)
的問題與上面的列表被夷爲平地,看起來像「1234」。在這種情況下,如何使用LPUSH將4個單獨元素推送到name
陣列?
我試圖使用LPUSH將多個值推送到redis LIST。該代碼看起來是這樣的:Redis-rb通過redis.lpush推送數組將扁平化列表
mylist = ["1", "2", "3", "4"]
$redis.lpush(name, mylist)
的問題與上面的列表被夷爲平地,看起來像「1234」。在這種情況下,如何使用LPUSH將4個單獨元素推送到name
陣列?
你可以這樣做:
# 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-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的寶石,你會有一些依賴性問題。最好等待國際海事組織正式交付。
採用V 3.0 +語法
r= Redis.new()
r.lpush("mylist", ["element1", "element2" , "element3"])
難道就沒有辦法在一個推做到這一點? Redis 2.4應該支持多個值,而不是迭代循環並逐個插入。 – randombits 2012-04-24 17:47:16
@randombits我沒有看到任何[Redis.rb方法](http://redis-rb.keyvalue.org/v2.2.0/Redis/Distributed.html)支持一組值。 – Phrogz 2012-04-24 18:15:10