BLPOP과 BRPOP은 Redis의 blocking list operations으로, 특정 리스트에서 데이터가 들어올 때까지 기다리는 명령어입니다. 하지만 두 명령어 사이에는 중요한 차이가 있습니다.


🔹 BLPOP (Blocking Left Pop)   (우리가 원하는것)

  • 왼쪽(head)에서 요소를 꺼냅니다.
  • 데이터가 없으면 지정된 시간(초) 동안 블로킹(대기)합니다.
  • 여러 개의 리스트를 지정하면 먼저 데이터가 들어온 리스트에서 값을 꺼냅니다.

📌 사용 예제:

 
BLPOP mylist 10
  • mylist의 왼쪽(head) 에서 데이터를 가져오며, 없으면 10초 동안 대기합니다.

🔹 BRPOP (Blocking Right Pop)

  • 오른쪽(tail)에서 요소를 꺼냅니다.
  • BLPOP과 동일하게 데이터가 없으면 지정된 시간 동안 대기합니다.
  • 여러 개의 리스트를 지정하면 먼저 데이터가 들어온 리스트에서 값을 꺼냅니다.

📌 사용 예제:

 
BRPOP mylist 10
  • mylist의 오른쪽(tail) 에서 데이터를 가져오며, 없으면 10초 동안 대기합니다.

✅ BLPOP vs. BRPOP 차이 정리

명령어데이터 꺼내는 방향FIFO/LIFO
BLPOP 왼쪽(Head) FIFO (First In, First Out)
BRPOP 오른쪽(Tail) LIFO (Last In, First Out)
  • BLPOP은 큐(FIFO) 방식과 유사
  • BRPOP은 스택(LIFO) 방식과 유사

🛠 실전 예제 (Python)

Redis의 BLPOP과 BRPOP을 Python에서 실행하는 예제입니다.

BLPOP 예제 (왼쪽에서 꺼내기)

 
import redis r = redis.Redis(host='localhost', port=6379, decode_responses=True) # 리스트에 데이터 추가 (왼쪽) r.lpush("mylist", "A", "B", "C") # 리스트: ["C", "B", "A"] # 왼쪽에서 꺼내기 (Blocking) print(r.blpop("mylist", timeout=5)) # 결과: ('mylist', 'C')

BRPOP 예제 (오른쪽에서 꺼내기)

 
# 리스트에 데이터 추가 (오른쪽) r.rpush("mylist", "X", "Y", "Z") # 리스트: ["X", "Y", "Z"] # 오른쪽에서 꺼내기 (Blocking) print(r.brpop("mylist", timeout=5)) # 결과: ('mylist', 'Z')

🔥 BLPOP, BRPOP 사용 시 주의할 점

  1. 리스트가 비어 있으면 블로킹되므로, timeout을 설정하는 것이 좋습니다.
  2. 멀티 리스트 지원: 여러 개의 리스트를 지정하면 가장 먼저 데이터가 들어온 리스트에서 값을 꺼냅니다.
     
    BLPOP list1 list2 list3 10
    • list1, list2, list3 중 가장 먼저 데이터가 들어온 리스트에서 값을 꺼냄
  3. 비동기 처리: BLPOP과 BRPOP은 블로킹 호출이므로, 비동기 처리가 필요한 경우 BRPOPLPUSH나 XREADGROUP을 고려하세요.

🚀 언제 BLPOP과 BRPOP을 사용할까?

시나리오추천 명령어
작업을 순차적으로 처리하는 큐가 필요할 때 BLPOP (FIFO)
최근 들어온 데이터부터 처리할 때 BRPOP (LIFO)
작업 처리를 분산하거나, 대기 시간이 없는 즉시 응답이 필요할 때 XREADGROUP (Redis Streams 활용)

요약:

  • FIFO 방식이 필요하면 BLPOP 사용
  • LIFO 방식이 필요하면 BRPOP 사용
  • Blocking(대기) 방식으로 비동기 처리를 원할 때 유용함

+ Recent posts