BRPOP 커맨드와 BLPOP 커맨드는 키의 목록과 타임아웃을 받는다.
BRPOPLPUSH 커맨드는 원본 키, 대상 키, 타임아웃을 받는다.
세 커맨드의 타임아웃 매개변수를 선택할 수 있고, 해당 매개변수의 기본 값은 0이다.
타임아웃이 0이란 말은, 레디스는 명세한 원본 키 목록에서 엘리먼트를 발견할 때까지 커맨드 호출이 블럭된다는 것을 의미한다.
List에서 최소 한 개의 엘리먼트를 발견할 때까지 또는 타임아웃을 초과할 때까지 레디스 클라이언트가 블럭되기 때문에 해당 커맨드를 blocking 커맨드라 불린다.
*BRPOP : RPOP 커맨드의 블럭킹 버전으로서, 매개변수로 주어진 키 리스트의 키를 순서대로 확인하면서, 비어있지 않은 리스트를 먼저 찾은 후 해당 리스트의 가장 마지막에 추가된 엘리먼트를 pop한다.
*BLPOP : LPOP 커맨드의 블럭킹 버전이다. 매개변수로 주어진 키 리스트의 키를 순서대로 확인하면서, 비어있지 않은 리스트를 먼저 찾은 후 해당 리스트의 가장 먼저 추가된 엘리먼트를 pop한다.
*BRPOPLPUSH : 원본 키의 마지막에 추가된 엘리먼트를 꺼내 대상 키의 첫 번째에 추가한다.
1. BRPOP 데모
A 터미널에서 list2에 a,b,c를 저장 (미리 BRPOP을 해도 된다.)
127.0.0.1:6379> RPUSH list2 a b c
(integer) 3
B 터미널에서 list1과 list2의 값을 얻기 위해 BRPOP 커맨드를 호출한다. 마지막 엘리먼트를 pop한 것을 확인할 수 있다.
127.0.0.1:6379> BRPOP list1 list2 0
1) "list2"
2) "c"
127.0.0.1:6379> BRPOP list1 list2 0
1) "list2"
2) "b"
127.0.0.1:6379> BRPOP list1 list2 0
1) "list2"
2) "a"
127.0.0.1:6379> BRPOP list1 list2 0
(블럭됨)
2. BLPOP 데모
A 터미널에서 RPUSH 커맨드로 list2 키를 추가한다.
127.0.0.1:6379> RPUSH list2 a b c
(integer) 3
B 터미널에서 BLPOP 커맨드를 호출한다. 리스트의 앞 엘리먼트부터 pop한 것을 확인할 수 있다.
127.0.0.1:6379> BLPOP list1 list2 0
1) "list2"
2) "a"
127.0.0.1:6379> BLPOP list1 list2 0
1) "list2"
2) "b"
127.0.0.1:6379> BLPOP list1 list2 0
1) "list2"
2) "c"
127.0.0.1:6379> BLPOP list1 list2 0
(블럭됨)
3. BRPOPLPUSH 데모
A 터미널에서 list1 키를 추가한다.
127.0.0.1:6379> RPUSH list1 a b c
(integer) 3
B 터미널에서 아래와 같이 실행한다. BRPOPLPUSH는 list1에 저장된 끝 엘리먼트부터 꺼내서 list1에 저장한다.
127.0.0.1:6379> BRPOPLPUSH list1 list2 0
"c"
127.0.0.1:6379> BRPOPLPUSH list1 list2 0
"b"
127.0.0.1:6379> BRPOPLPUSH list1 list2 0
"a"
127.0.0.1:6379> BRPOPLPUSH list1 list2 0
(블럭됨)
A 터미널에서 list2를 확인한다.
127.0.0.1:6379> LLEN list2
(integer) 3
127.0.0.1:6379> LRANGE list2 0 -1
1) "a"
2) "b"
3) "c"
참고
http://redis.io/commands/BRPOP
http://redis.io/commands/blpop
'Redis' 카테고리의 다른 글
[redis] slave-read-only (0) | 2016.03.09 |
---|---|
[redis] 리눅스 메모리 설정 관련 확인하는 코드 - 메모리 오버커밋, THP (0) | 2016.03.06 |
[redis] 낙관적 잠금(optimistic lock) (0) | 2016.02.29 |
[redis] 3.0에 있는 redis cluster 실행해보기 (0) | 2016.02.15 |
[redis] AOF (append-only-file) (0) | 2016.02.10 |