2013-11-02 18 views
6

Mã sau lưu toàn bộ mảng dưới dạng giá trị đơn trong danh sách redis. Nhưng tôi muốn lưu các giá trị mảng riêng lẻ. Tôi làm nó như thế nào?Cách lưu mảng javascript dưới dạng danh sách redis

P.S Xin lỗi vì tiếng Anh kém.

var redis = require('redis'), 
    client = redis.createClient(); 

var arr = [1,2,3]; 

client.rpush('testlist',arr); 
+1

Bạn muốn lặp qua các phần tử mảng và chèn chúng riêng rẽ. Bạn có thể viết một vòng lặp 'for' đơn giản hoặc sử dụng' Array.prototype.forEach'. – fardjad

Trả lời

14

Sử dụng multi() đường ống nhiều lệnh cùng một lúc:

var redis = require('redis'), 
    client = redis.createClient(); 

var arr = [1,2,3]; 

var multi = client.multi() 

for (var i=0; i<arr.length; i++) { 
    multi.rpush('testlist', arr[i]); 
} 

multi.exec(function(errors, results) { 

}) 

Và cuối cùng gọi exec() để gửi các lệnh để redis.

+0

Sử dụng nút redis-node không hoạt động đối với tôi, được sửa đổi một chút ở đây: https://gist.github.com/vainrobot/141b2162e1200f7c7855 – fullstacklife

+0

cách truy xuất lại nút đó ?? bình thường nhận được là không làm việc. – jeevs

+0

@jeevs 'lrange danh sách kiểm tra 0 -1' https://redis.io/commands/lrange – MyMomSaysIamSpecial

6

Thậm chí nếu @gimenete công trình trả lời, cách tốt nhất để làm những gì bạn muốn là để chuyển tiếp các yếu tố danh sách như đối số cho RPUSH như vậy:

var redis = require('redis'), 
    client = redis.createClient(); 

var arr = [1,2,3]; 
client.rpush.apply(client, ['testlist'].concat(arr)); 

// ... or with a callback 
client.rpush.apply(client, ['testlist'].concat(arr).concat(function(err, ok){ 
    console.log(err, ok); 
})); 

Ưu: - một chỉ dẫn duy nhất sẽ transmited để Redis

Nhược điểm: - một góc hợp cụ thể: .apply sẽ ném một RangeError: Maximum call stack size exceeded nếu độ dài danh sách đối số truyền cho RPUSH là quá lớn (một chút ove r 100 000 mục cho v8).

Từ MDC:

The consequences of applying a function with too many arguments (think more than tens of thousands of arguments) vary across engines (JavaScriptCore has hard-coded argument limit of 65536), because the limit (indeed even the nature of any excessively-large-stack behavior) is unspecified. Some engines will throw an exception. More perniciously, others will arbitrarily limit the number of arguments actually passed to the applied function.

+0

Không hoạt động đối với tôi. 'Lỗi: ERR sai số đối số cho lệnh 'rpush'. – user2522545

+0

Tôi đã thử nghiệm lại và nó hoạt động, bạn đã sử dụng mã nào? – FGRibreau

+0

Chính xác khi bạn nhập. Không có mã nào khác trong tệp js nút của tôi. – user2522545

Các vấn đề liên quan