<Redis> 1. 트랜잭션
by BFine가. 여러 개의 명령을 한번에 보내고 싶은데..
a. Transaction
- 레디스는 명령들을 그룹화해서 하나의 스텝으로 실행이 가능하다. 이를 트랜잭션으로 보고 이 안의 모든 명령은 순서대로 처리가 된다.
=> 하나의 isolated Operation으로 처리되기 때문에 다른 클라이언트의 트랙잭션이 중간에 들어올 수 없다.
- 레디스는 트랜잰잭션에 대한 rollback은 지원하지 않는다. (성능에 좋지 않기 때문에 지원하지 않는다고 한다.)
b. Multi & Exec & Discard
- 레디스는 multi 명령어를 통해서 트랜잭션을 시작할 수 있고 exec 명령어를 통해 commit 하며 discard 명령어를 통해 트트랜잭션을 abort 할 수 있다.
c. Watch
- 레디스는 watch 명령어를 통해서 key에 대한 감시를 지정 할 수 있으며 CAS(check and set)를 통해 낙관적락(Optimistic lock)을 제공한다.
=> watch 하고 있는 key에 변경이 없는 경우에만 트랜잭션이 반영된다.
- watch 된 key는 exec 명령 이후에 실패 여부와 관계없이 unwatch 된다. (커넥션이 끊어진 경우에도 동일)
나. 실패 케이스 테스트(Redis ver.7)
a. 명령 자체가 실패하는 경우
- 오타가 발생하거나 다른 이유로 명령어 자체가 실패하는 경우에 트랜잭션의 모든 명령들은 반영되지 않는다.
b. 실행시 실패하는 경우
- exec 이후 QUEUED 된 명령들 중 하나가 실패 하더라도 나머지 명령들은 정상적으로 반영된다.
c. watch 하고 있는 key가 수정 or 만료된 경우
- watch 하고 있던 key가 다른 트랜잭션에서 수정 or 만료 된 경우에 하나의 트랜잭션의 모든 명령이 실행되지 않는다.
=> 만료의 경우 6.0.9 이전 버전이면 전체 실패하지 않고 무시된다.
'공부 > Redis' 카테고리의 다른 글
<Redis> 2. 아키텍쳐 (0) | 2022.09.03 |
---|---|
<Redis> 0. Redis와 Data Types (0) | 2022.08.14 |
블로그의 정보
57개월 BackEnd
BFine