2013-11-02 11 views
6

Il seguente codice salva l'intero array come valore singolo nell'elenco redis. Ma voglio salvare i valori dell'array singolarmente. Come posso farlo?Come salvare l'array javascript come lista redis

P.S Mi dispiace per l'inglese scarso.

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

var arr = [1,2,3]; 

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

Si desidera scorrere gli elementi dell'array e inserirli singolarmente. Puoi scrivere un semplice ciclo 'for' o usare' Array.prototype.forEach'. – fardjad

risposta

14

Usa multi() a Pipeline comandi multipli in una sola volta:

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

}) 

E infine chiamare exec() per inviare i comandi al Redis.

+0

Utilizzo di redis-node che non funzionava per me, leggermente modificato qui: https://gist.github.com/vainrobot/141b2162e1200f7c7855 – fullstacklife

+0

come recuperarlo indietro ?? il normale get non funziona. – jeevs

+0

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

6

Anche se @gimenete opere risposta, il modo migliore per fare quello che vuoi è quello di trasmettere gli elementi della lista come argomenti a rpush in questo modo:

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

Pro: - una singola istruzione sarà transmited Redis

Contro: - un angolo e minuscole: .apply lancerà una RangeError: Maximum call stack size exceeded se la lunghezza della lista argomenti passati al rpush è troppo grande (un po 'ove r 100 000 articoli per v8).

Da 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

Non funziona per me. 'Errore: ERR numero errato di argomenti per il comando 'rpush'. – user2522545

+0

L'ho provato di nuovo e funziona, che codice hai usato? – FGRibreau

+0

Esattamente come si digita. Non c'è altro codice nel mio file js del nodo. – user2522545

Problemi correlati