2012-03-08 7 views
6

Sono molto nuovo per i redis e continuo a giocarci. Voglio testare per vedere se è rilevante per il mio progetto, ma non sono sicuro di un comando specifico che sto utilizzando. Gli utenti di SO mi hanno convinto dei vantaggi in termini di prestazioni dell'utilizzo di pipeline e transazioni, quindi ho pensato di chiedergli come fare.È possibile redigare più pipeline di comandi che dipendono da quelli precedenti?

Fondamentalmente ho due dichiarazioni che voglio solo per il rilascio e non dover attendere il risultato (sembra un buon candidato per il rivestimento del tubo Ecco come si presenta:.

Does valueX exist? 
If it does insert valueY 

sua piuttosto semplice ma così tutti i modi in cui mi sono guardato sembrano aspettare una risposta per se ValueX esiste, e perché sto facendo oltre un miliardo di cicli del mio programma lo ferma.

E 'possibile? mi aiuta a usare Java, ma non ho deciso quale libreria client (jedis o jredis, ancora in fase di test). In realtà non sono nemmeno completamente risolta con i redis, ma mi sto appoggiando molto pesantemente verso di esso (sembra buono per quello che sto facendo in termini di velocità), quindi qualsiasi suggerimento è accettabile.

risposta

6

No, per il momento non è possibile realizzare una cosa del genere. Quello che cerchi è una caratteristica mancante per il momento, ma sarà disponibile con la versione 2.6 di Redis. Si chiama script LUA. È possibile eseguire comandi server che dipendono da comandi precedenti, tutto in uno, senza la necessità di recuperarli sul client. Per maggiori dettagli vedi here.

+0

Grazie mille per la risposta. Sono contento di vederla arrivare ma non voglio davvero aspettare così ho pensato di poter costruire qualcosa di simile nel mio programma. Ecco la logica, ho un metodo con cui ho inviato coppie di valori di ricerca/scrittura, e accoda le richieste e le esegue in una transazione? Quindi il resto del mio programma può continuare mentre questa parte è in coda? –

+1

È possibile pipeline un batch di comandi di ricerca, attendere i risultati e quindi eseguire il pipeline di alcuni comandi di scrittura. Puoi farlo in un thread/processo separato, in modo da non bloccare fino a quando i risultati non saranno disponibili. – hymloth

+0

buon suggerimento, proverò a dare uno scatto. Grazie! –