You will be fine

<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

활동하기