~ docker exec -it 06f8c72dd4cc redis-cli
127.0.0.1:6379> RPUSH stack1 100
(integer) 1
127.0.0.1:6379> RPUSH stack1 100
(integer) 2
127.0.0.1:6379> RPUSH stack1 100
(integer) 3
127.0.0.1:6379> RPUSH stack1 200
(integer) 4
127.0.0.1:6379> RPOP stack1
"200"
127.0.0.1:6379> RPOP stack1
"100"
127.0.0.1:6379> RPOP stack1
"100"
127.0.0.1:6379> RPOP stack1
"100"
127.0.0.1:6379> RPOP stack1
(nil)
127.0.0.1:6379> RPUSH queue1 100
(integer) 6
127.0.0.1:6379> RPUSH queue1 200
(integer) 7
127.0.0.1:6379> RPUSH queue1 300
(integer) 8
127.0.0.1:6379> RPUSH queue1 400
(integer) 9
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "200"
3) "300"
4) "400"
127.0.0.1:6379> LPOP queue1
"100"
127.0.0.1:6379> LPOP queue1
"200"
127.0.0.1:6379> LPOP queue1
"300"
127.0.0.1:6379> LPOP queue1
"400"
127.0.0.1:6379> LPOP queue1
(nil)
127.0.0.1:6379> RPUSH queue1 100
(integer) 1
127.0.0.1:6379> RPUSH queue1 100
(integer) 2
127.0.0.1:6379> RPUSH queue1 200
(integer) 3
127.0.0.1:6379> RPUSH queue1 200
(integer) 4
127.0.0.1:6379> RPUSH queue1 300
(integer) 5
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "100"
3) "200"
4) "200"
5) "300"
127.0.0.1:6379> LRANGE queue1 0 -1
127.0.0.1:6379> LTRIM queue1 0 2
OK
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "100"
3) "200"
127.0.0.1:6379> RPUSH queue1 400
(integer) 4
127.0.0.1:6379> RPUSH queue1 50
(integer) 5
127.0.0.1:6379> RPUSH queue1 60
(integer) 6
127.0.0.1:6379> RPUSH queue1 70
(integer) 7
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "100"
3) "200"
4) "400"
5) "50"
6) "60"
7) "70"
127.0.0.1:6379> LTRIM queue1 0 2
OK
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "100"
3) "200"
위 Redis 명령어 세션에서 수행된 작업에 대한 설명은 다음과 같습니다.
1. RPUSH
와 RPOP
을 이용한 stack1
리스트 조작:
127.0.0.1:6379> RPUSH stack1 100
127.0.0.1:6379> RPUSH stack1 100
127.0.0.1:6379> RPUSH stack1 100
127.0.0.1:6379> RPUSH stack1 200
RPUSH
명령어는 리스트의 오른쪽(끝)에 요소를 추가합니다.- 위 명령어는
stack1
리스트에 차례로100
,100
,100
,200
을 추가합니다.
127.0.0.1:6379> RPOP stack1
RPOP
명령어는 리스트의 마지막 요소를 제거하고 반환합니다.- 위 명령어에서는
stack1
리스트의 끝에서부터 요소를 하나씩 꺼냅니다. 리스트의 순서대로"200"
,"100"
,"100"
,"100"
을 꺼내고, 마지막에 리스트가 비면nil
을 반환합니다.
2. RPUSH
, LRANGE
, LPOP
을 이용한 queue1
리스트 조작:
127.0.0.1:6379> RPUSH queue1 100
127.0.0.1:6379> RPUSH queue1 200
127.0.0.1:6379> RPUSH queue1 300
127.0.0.1:6379> RPUSH queue1 400
queue1
리스트에 차례대로100
,200
,300
,400
을 추가합니다.
127.0.0.1:6379> LRANGE queue1 0 -1
LRANGE queue1 0 -1
는queue1
리스트의 모든 요소를 반환합니다. 여기서0
은 첫 번째 요소,-1
은 마지막 요소를 의미합니다.- 이 명령어는 리스트에 있는
100
,200
,300
,400
을 반환합니다.
127.0.0.1:6379> LPOP queue1
LPOP
명령어는 리스트의 첫 번째 요소를 제거하고 반환합니다.queue1
리스트에서 차례로"100"
,"200"
,"300"
,"400"
을 제거한 후, 리스트가 비면nil
을 반환합니다.
3. 새로운 요소 추가 및 LTRIM
을 이용한 리스트 자르기:
127.0.0.1:6379> RPUSH queue1 100
127.0.0.1:6379> RPUSH queue1 100
127.0.0.1:6379> RPUSH queue1 200
127.0.0.1:6379> RPUSH queue1 200
127.0.0.1:6379> RPUSH queue1 300
queue1
리스트에 다시100
,100
,200
,200
,300
을 차례로 추가합니다.
127.0.0.1:6379> LRANGE queue1 0 -1
queue1
리스트의 모든 요소를 반환하며, 그 결과100
,100
,200
,200
,300
이 포함됩니다.
127.0.0.1:6379> LTRIM queue1 0 2
LTRIM queue1 0 2
명령어는 리스트를 0번 인덱스부터 2번 인덱스까지 자릅니다. 즉, 첫 번째 세 요소만 남기고 나머지는 모두 제거됩니다.- 리스트는 이제
100
,100
,200
만 남게 됩니다.
4. 다시 리스트에 요소 추가 및 LTRIM
으로 자르기:
127.0.0.1:6379> RPUSH queue1 400
127.0.0.1:6379> RPUSH queue1 50
127.0.0.1:6379> RPUSH queue1 60
127.0.0.1:6379> RPUSH queue1 70
queue1
리스트에 다시400
,50
,60
,70
을 추가합니다.
127.0.0.1:6379> LRANGE queue1 0 -1
queue1
리스트의 모든 요소를 반환하며, 그 결과는100
,100
,200
,400
,50
,60
,70
입니다.
127.0.0.1:6379> LTRIM queue1 0 2
- 리스트를 다시 0번 인덱스부터 2번 인덱스까지 자릅니다. 이제 리스트에는
100
,100
,200
만 남습니다.
27.0.0.1:6379> LRANGE queue1 0 -1
(empty array)
127.0.0.1:6379> LPUSH queue1 200
(integer) 1
127.0.0.1:6379> LPUSH queue1 100
(integer) 2
127.0.0.1:6379> LPUSH queue1 100
(integer) 3
127.0.0.1:6379> LPUSH queue1 50
(integer) 4
127.0.0.1:6379> LPUSH queue1 60
(integer) 5
127.0.0.1:6379> LPUSH queue1 70
(integer) 6
127.0.0.1:6379> LRANGE queue1 0 -1
1) "70"
2) "60"
3) "50"
4) "100"
5) "100"
6) "200"
127.0.0.1:6379> LTRM queue1 0 2
(error) ERR unknown command 'LTRM', with args beginning with: 'queue1' '0' '2'
127.0.0.1:6379> LTRIM queue1 0 2
OK
127.0.0.1:6379> LRANGE queue1 0 -1
1) "70"
2) "60"
3) "50"
5. BLPOP:
BRPOP
는 Redis에서 blocking list pop 명령어입니다. 이 명령어는 하나 이상의 리스트의 끝에서 (오른쪽에서) 요소를 제거하고 반환하는 작업을 수행하지만, 해당 리스트가 비어있을 경우에는 지정된 시간 동안 대기합니다. 만약 시간 내에 요소가 추가되지 않으면 nil
을 반환합니다.
BRPOP
의 사용법은 다음과 같습니다:
BRPOP key [key ...] timeout
매개변수 설명:
key [key ...]
: 리스트의 이름입니다. 하나 이상의 리스트를 지정할 수 있습니다. 여러 리스트를 지정하면, Redis는 지정된 리스트들 중에서 요소가 있는 리스트를 차례대로 확인합니다.timeout
: 리스트가 비어있을 경우 얼마나 대기할 것인지를 초(second) 단위로 지정합니다.0
을 지정하면 무한정 대기합니다.
예시:
1. 리스트가 비어있지 않은 경우:
RPUSH mylist "one"
RPUSH mylist "two"
BRPOP mylist 0
# 응답: 1) "mylist", 2) "two"
이 경우, mylist
에서 마지막 요소인 "two"
가 제거되고 반환됩니다.
2. 리스트가 비어있는 경우:
BRPOP mylist 5
이 경우, mylist
가 비어 있으면 5초 동안 요소가 추가되기를 기다립니다. 시간이 지나도 요소가 추가되지 않으면 nil
을 반환합니다.
3. 여러 리스트에서 블록킹 처리:
BRPOP list1 list2 10
이 명령어는 list1
과 list2
에서 마지막 요소를 확인합니다. 만약 list1
이 비어있으면 list2
를 확인합니다. 둘 다 비어있으면 10초 동안 대기합니다.
특징:
- 블록킹: 리스트가 비어있을 때 다른 요소가 추가될 때까지 대기할 수 있다는 점에서
BRPOP
은RPOP
과 다릅니다. - 타임아웃: 시간 초과를 설정하여 특정 시간 동안만 대기할 수 있습니다.
0
을 설정하면 무기한 대기합니다.
이 명령어는 주로 consumer가 데이터를 처리할 준비가 될 때까지 대기해야 하는 producer-consumer 패턴에서 유용하게 사용됩니다.
'DB > Redis' 카테고리의 다른 글
Redis Hash 실습: 키-필드-값 데이터 구조 관리하기 (0) | 2024.09.11 |
---|---|
Redis Set 실습: 집합 연산과 활용법 (0) | 2024.09.11 |
Redis 데이터타입 정리: 문자열부터 복합 데이터까지 (0) | 2024.09.11 |
Redis CLI 사용법: 명령어로 시작하기 (1) | 2024.09.11 |
Redis 입문: 기본 개념 톺아보기 (0) | 2024.09.11 |