2012-05-22 7 views
43

ho semplice chiave elenco Redis => "supplier_id"Redis recuperare tutti il ​​valore della lista senza iterazione e senza popping

Ora tutto quello che lo vogliono recuperare tutto il valore della lista senza in realtà l'iterazione sopra o popping il valore dalla lista

Esempio per recuperare tutto il valore da un elenco Ora ho iterare lunghezza Redis

element = [] 
0.upto(redis.llen("supplier_id")-1) do |index| 
    element << redis.lindex("supplier_id",index) 
end 

questo può essere fatto senza l'iterazione perhap con Redis migliore modellazione. Qualcuno può suggerire

+0

Puoi descrivere cosa vuoi fare con la lista redis? forse dovresti usare un tipo di chiave diverso. – eyossi

+0

@eyossi L'idea è di creare un tag di selezione con valore options è stato il supplier_id ha presentato i database poiché il recupero dei record nei database relazionali era costoso che avremmo pensato di scaricare tutto il supplier_id in redis quando sono stati creati ed eliminarli quando sono distrutti dalla base di dati – Viren

risposta

101

Per recuperare tutti gli elementi di un elenco con Redis, non è necessario eseguire iterazioni e recuperare singoli elementi. Sarebbe davvero inefficiente.

È sufficiente utilizzare il comando LRANGE per recuperare tutti gli elementi in un'unica operazione.

elements = redis.lrange("supplier_id", 0, -1) 

restituirà tutte le voci dell'elenco senza alterare la lista stessa.

+2

C'è un modo per farlo in modo efficiente memoria? – nilskp

+1

Se con memoria efficiente si intende iterare in modo incrementale sugli articoli, può essere implementato usando llen e eseguendo il loop su chiamate di lrange, ma aumenterà il numero di roundtrip e si perderanno consistenza. –

+0

Ogni volta che provo, viene visualizzato l'errore "Argomenti non validi" – Ricardo

2

Sono un po 'poco chiaro sulla tua domanda, ma se il supplier_id è numerico, perché non utilizzare un ZSET?

Aggiungere i valori in questo modo:

ZADD suppliers 1 "data for supplier 1" 
ZADD suppliers 2 "data for supplier 2" 
ZADD suppliers 3 "data for supplier 3" 

È quindi possibile rimuovere tutto ciò fino a (ma non compreso il fornitore tre) in questo modo:

ZREMRANGEBYSCORE suppliers -inf 2 

o

ZREMRANGEBYSCORE suppliers -inf (3 

Quello ti dà anche un accesso molto veloce (per ID fornitore) se vuoi solo leggerne il contenuto.

Spero che questo aiuti!

+0

puoi fornire la documentazione per quello sicuro certamente può aiutare – Viren

Problemi correlati