2015-03-29 20 views
17

Quando si utilizza la transazione in redis, fondamentalmente esegue il pipeline di tutti i comandi all'interno della transazione. E quando viene attivato EXEC, tutti i comandi vengono eseguiti insieme mantenendo sempre l'atomicità di più comandi.pipelining vs transaction in redis

Non è lo stesso del pipelining.

In che modo la pipeline e la transazione sono diverse. Anche perché la sola natura threaded di redis è sufficiente. Perché abbiamo bisogno esplicitamente di pipelining/transaction.

risposta

33

Il pipelining è principalmente un ottimizzazione della rete. Significa essenzialmente che il client memorizza un gruppo di comandi e li invia al server in un colpo solo. I comandi non sono garantiti per essere eseguiti in una transazione. Il vantaggio qui è il risparmio del tempo di andata e ritorno della rete per ogni comando.

Redis è a thread singolo in modo che un comando individuale è sempre atomico, ma due comandi dati da client diversi possono essere eseguiti in sequenza, alternando ad esempio tra loro.

Multi/exec, tuttavia, garantisce che nessun altro client esegua comandi tra i comandi nella sequenza multi/exec.

+1

per chiarimenti, supponiamo che io usi jedis come segue: JEDIS.MULTI \\ line 1; JEDIS.command1 \\ line 2; JEDIS.command2 \\ riga 3; JEDIS.EXEC \\ line 4; quindi per ogni riga questo codice andrà al server redis, quindi quattro round avanti e indietro dal server redis. Tuttavia, se eseguo la pipeline della transazione, tutte e quattro le righe andranno al server redis in un round.È giusto? – user2713255