728x90
반응형
목차는 redis 목차 에 있습니다.
source 는 Github 에 있습니다.
[Redis 5편] Redis 상세 정리 (트랜잭션과 Lock)
redis 트랜잭션과 Lock
- redis 는 key,value NoSQL 이지만 transaction, lock 관련 기능을 제공하고 있습니다.
redis 트랜잭션 사용방법 (MULTI)
- MULTI 명령어를 사용한 후, 입력된 명령어가 QUEUE 에 쌓이며, EXEC 명령어를 사용할 때, QUEUE 에 들어있는 명령어가 한 번에 수행됩니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
127.0.0.1:6379> MULTI | |
OK | |
127.0.0.1:6379(TX)> set member1 testName | |
QUEUED | |
127.0.0.1:6379(TX)> set member2 testName2 | |
QUEUED | |
127.0.0.1:6379(TX)> EXEC | |
1) OK | |
2) OK | |
127.0.0.1:6379> GET member1 | |
"testName" |
- 만약 QUEUE 에 들어간 명령어 중 잘못된 명령어가 있다면 이전 실행된 명령어들은 Redis 서버에 반영됩니다.
redis Lock (WATCH)
- WATCH 명령어를 사용해서 특정 Key 에 Lock 을 걸면 Lock 이 걸리게 됩니다.
- RDB 처럼 Lock 을 계속 잡는게 아니라 트랜잭션이 시작된 상황에서 값 변경을 1번으로 제한하는 기능입니다.
- 아래 케이스는 터미널 2개를 띄워놓고 값 변경에 실패한 케이스입니다.
- terminal 1 에서 ‘lockTest’ 라는 key 에 대해서 lock 을 걸었습니다.
- terminal 2 에서 ‘lockTest’ 의 값을 변경했습니다.
- terminal 1 에서 트랜잭션을 열고 ‘lockTest’ 값을 변경해서 실행했습니다.
- terminal 1 에서 에러가 발생했으며, lockTest 는 값이 1로 조회됩니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# terminal 1, terminal 2 로 구분했습니다. | |
terminal 1 > watch lockTest | |
OK | |
terminal 2> set lockTest 1 | |
terminal 1> MULTI | |
OK | |
terminal 1> set lockTest 2 | |
QUEUED | |
terminal 1> EXEC | |
(error) EXECABORT Transaction discarded because of previous errors. | |
terminal 1> get lockTest | |
"1" |
결론
- 트랜잭션을 사용하여 데이터를 묶어야하는 요건이 있을 때는 MULTI 를 사용하며, 특정 데이터에 대해 Lock 을 걸어야 하는 요건이 있으면 WATCH 를 사용합니다.
reference
'NoSQL > redis' 카테고리의 다른 글
[Redis 6편] Redis 성능 (0) | 2022.06.11 |
---|---|
[Redis 3편] Redis 상세 정리 (key, 클러스터, 센티넬) (0) | 2022.01.13 |
[Redis 2편] Redis 상세 정리 (명령어, 싱글 스레드, 영속성) (0) | 2022.01.13 |
[Redis 4편] spring redis 환경 세팅 및 예제 (0) | 2022.01.06 |
[Redis 1] Redis 는 무엇이며 언제 사용하는가? (0) | 2022.01.04 |
댓글