2012-04-24 14 views
6

Tôi đang cố gắng đẩy nhiều giá trị vào một DANH SÁCH redis bằng LPUSH. Mã này trông giống như sau:Redis-rb đẩy một mảng qua redis.lpush đang làm phẳng danh sách

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

Vấn đề với trên là danh sách được san phẳng để trông giống như "1234". Làm cách nào để sử dụng LPUSH trong trường hợp này để đẩy 4 phần tử riêng lẻ vào mảng name?

Trả lời

0

Bạn có thể làm:

# 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

Có không có cách nào để làm điều này trong một push? Redis 2.4 nên hỗ trợ nhiều giá trị được đẩy vs lặp lại qua một vòng lặp và chèn từng cái một. – randombits

+0

@randombits Tôi không thấy bất kỳ [phương pháp nào cho Redis.rb] (http://redis-rb.keyvalue.org/v2.2.0/Redis/Distributed.html) hỗ trợ một mảng giá trị. – Phrogz

2

Bạn có thể muốn có một cái nhìn tại địa chỉ:

Phiên bản Redis-rb 2.2.2 không hỗ trợ lệnh variadic. Chúng đã được giới thiệu cho phiên bản 3.0, nhưng nó chưa được phân phối.

Không có phương pháp cụ thể để xử lý các mảng trong các lệnh tham số variadic. Mã của bạn có thể hoạt động tốt với phiên bản 3.0.

Trong khi đó, tôi đề nghị bạn sử dụng một đường ống như:

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

Với các đường ống dẫn, số lượng roundtrips sẽ giống nhau hơn so với sử dụng các thông số lệnh variadic.

Nếu bạn thực sự muốn sử dụng các thông số variadic lệnh, bạn có thể dễ dàng cài đặt một phiên bản phát hành trước 3.0 sử dụng:

gem install --prerelease redis 
gem list redis  

*** LOCAL GEMS *** 
redis (3.0.0.rc1, 2.2.2) 

và kích hoạt nó trong kịch bản của bạn bằng cách sử dụng:

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

Xin lưu ý rằng nếu bạn có đá quý khác tùy thuộc vào đá quý redis, bạn sẽ có một số vấn đề phụ thuộc. Tốt hơn là đợi IMO giao hàng chính thức.

0

Với v 3.0 + cú pháp là

r= Redis.new() 

r.lpush("mylist", ["element1", "element2" , "element3"]) 
Các vấn đề liên quan