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


http://redis.io/commands/brpoplpush

Posted by '김용환'
,