2015-03-29 15 views
17

Kiedy używamy transakcji w redis to zasadniczo potokuje wszystkie polecenia w ramach transakcji. Po uruchomieniu EXEC wszystkie polecenia są wykonywane razem, dzięki temu zawsze zachowują atomowość wielu poleceń.pipelining vs transakcja w redis

Nie jest to to samo co pipelining.

Czym różnią się potoki i transakcje. Również dlaczego pojedynczy wątkowy charakter redis nie jest wystarczający. Dlaczego wyraźnie potrzebujemy potoku/transakcji.

Odpowiedz

33

Pipelining to przede wszystkim optymalizacja sieci. Zasadniczo oznacza to, że klient buforuje kilka poleceń i wysyła je na serwer za jednym razem. Polecenia nie są gwarantowane do wykonania w transakcji. Korzyścią jest tutaj zaoszczędzenie czasu podróży w sieci dla każdego polecenia.

Redis jest pojedynczym gwintem, więc polecenie indywidualne jest zawsze atomowe, ale dwa dane polecenia od różnych klientów mogą być wykonywane kolejno, na przykład na przemian.

Multi/exec zapewnia jednak, że żaden inny klient nie wykonuje poleceń pomiędzy poleceniami w sekwencji multi/exec.

+1

dla wyjaśnienia przypuśćmy, że jeśli używam jedi w następujący sposób: JEDIS.MULTI \\ linia 1; JEDIS.command1 \\ linia 2; JEDIS.command2 \\ linia 3; JEDIS.EXEC \\ linia 4; następnie dla każdej linii kod ten trafi do serwera redis, a więc cztery rundy tam iz powrotem z serwera redis. Jeśli jednak potoczę transakcję, wszystkie cztery linie przejdą do serwera redis w jednej rundzie. Czy to prawda? – user2713255