- 트랜잭션이란 정보의 교환 및 처리의 단위
- Redis에서 여러개의 명령어를 하나의 단위로 실행하는 기능
- 모든 명령어가 순차적으로 실행됨 (👉🏻 원자적실행 atomic 보장)
여러개의 명령들을 내부 큐에 모아두고, 트랜잭션 완료를 전달하면 일련의 명령들을 한번에 실행시킴
트랜잭션이 완료되기 전까지는 다른 요청들과 격리되는 것이 특징 (= isolate)
잘못된 명령어 입력 시, 트랜잭션 전체가 롤백됨
인자값이 잘못된 경우에는, 중간에 실패해도 롤백이 불가함
인자값이 잘못된 해당 명령만 실패하고, 이미 실행된 명령은 롤백 X
MULTI
명령어를 사용하면 트랜잭션 모드가 활성화됨EXEC
or DISCARD
를 호출하기 전까지 실행되지 않음MULTI
SET user:1:name "mallang"
INCR user:1:count
EXEC
MULTI
이후 Queue에 저장된 모든 명령어를 한꺼번에 실행함MULTI
SET user:1:name "mallang"
INCR user:1:count
EXEC
# user:1:name 값이 "mallang"으로 저장됨
# user:1:count 값이 1 증가함
MULTI
상태에서 입력된 모든 명령어를 취소하고 트랜잭션 모드를 종료함DISCARD
가 실행되면, 트랜잭션 Queue에 있는 모든 명령어가 삭제됨MULTI
SET user:1:name "mallang"
INCR user:1:count
DISCARD
# user:1:name과 user:1:count 변경없음(트랜잭션 취소)
WATCH Key
를 사용하면, 해당 키가 변경되었을 경우 트랜잭션이 실행되지 않음WATCH user:1:cash
MULTI
DECR user:1:cash 100
EXEC
# user:1:cash 값이 다른 client에 의해 변경되면 EXEC가 실패하고 트랜잭션이 실행되지 않음