레디스는 트랜잭션을 유지하기 위해 MULTI, EXEC, DISCARD, WATCH 명령어를 지원한다.
MULTI 명령어로 트랜잭션을 시작한 후 명령어들을 입력하면 Queued 됩니다.
하지만, 중간에 아예 잘못된 키워드의 명령어를 수행하게 된다면 모든 작업들이 Discard됩니다.
(error) EXECABORT Transaction discarded because of previous error. 에러 발생
반면, 인자값이 잘못된 경우 전체 롤백은 되지 않고 나머지 명령들은 처리 되기에 이러한 특징을 잘 이해해야 한다.


127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set key test
QUEUED
127.0.0.1:6379(TX)> set key2 test2
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) OK
127.0.0.1:6379> get key
(nil)
127.0.0.1:6379> get key
"test"
127.0.0.1:6379> get key2
"test2"
첫 번째 애플리케이션에서 exec를 실행하기 전 다른 cli에서 key를 조회하면 nil을 확인할 수 있다.
그래서 트랜잭션을 완료하기 위해 exec를 수행하였고 두 번째 애플리케이션에서 key들을 조회하여 값을 확인할 수 있다.
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set key test
QUEUED
127.0.0.1:6379(TX)> setadsd testest(error) ERR unknown command
setadsd, with args beginning with:testest,127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.127.0.0.1:6379> get key
(nil)
multi 명령어로 TX를 오픈한 후 잘못된 명령어를 입력하니 에러가 발생했고, exec 명령어를 수행하니 (error) EXECABORT Transaction discarded because of previous errors. 에러와 함게 rollback 된 것을 확인할 수 있다. (get하니 nil 반환)
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set key test
QUEUED
127.0.0.1:6379(TX)> set key2 test2 test3
QUEUED
127.0.0.1:6379(TX)> set key3 test3
QUEUED
127.0.0.1:6379(TX)> set key4 test4 test6
QUEUED127.0.0.1:6379(TX)> exec
1) OK
2) (error) ERR syntax error
3) OK
4) (error) ERR syntax error
set 명령어를 잘못 사용한 2개의 명령어에 대한 결과가 (error) ERR syntax error를 반환하는 것을 확인할 수 있다.