2013-11-02 15 views
6

Poniższy kod zapisuje całą tablicę jako pojedynczą wartość na liście redis. Ale chcę indywidualnie zapisać wartości tablicowe. Jak mogę to zrobić?Jak zapisać tablicę javascript jako listę redis

P.S Tak mi przykro z powodu słabego angielskiego.

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

var arr = [1,2,3]; 

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

Chcesz iterację elementów tablicy i wstawić je indywidualnie. Możesz napisać prostą pętlę 'for' lub użyć' Array.prototype.forEach'. – fardjad

Odpowiedz

14

Zastosowanie multi() do rurociągów wielu poleceń na raz:

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) { 

}) 

i wreszcie wywołać exec() do wysyłania poleceń do Redis.

+0

Korzystanie z węzła redis, który nie działał dla mnie, nieznacznie zmodyfikowano tutaj: https://gist.github.com/vainrobot/141b2162e1200f7c7855 – fullstacklife

+0

jak go odzyskać? normalne get nie działa. – jeevs

+0

@jeevs 'lrange testlist 0 -1' https://redis.io/commands/lrange – MyMomSaysIamSpecial

6

Nawet jeśli @gimenete prace odpowiedź, najlepszym sposobem, aby robić to, co chcesz przekazać elementy listy jako argumenty do rpush tak:

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

Plusy: - pojedyncza instrukcja będzie przesłanych do Redis

Wady: - narożną literami: .apply rzuci RangeError: Maximum call stack size exceeded jeśli długość lista argumentów przekazanych do rpush jest zbyt duże (trochę ove r 100 000 pozycji dla v8).

Od 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

Nie działa dla mnie. 'Błąd: Błędna liczba argumentów ERR dla komendy 'rpush'. – user2522545

+0

Przetestowałem to ponownie i działa, jaki kod użyłeś? – FGRibreau

+0

Dokładnie tak, jak piszesz. W moim pliku js węzła nie ma innego kodu. – user2522545

Powiązane problemy