Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Redis LPOP·BLPOP 완벽 가이드 – 리스트의 첫 번째 요소 제거하고 반환하기

이 튜토리얼에서는 Redis 데이터 저장소에 저장된 리스트(list) 값의 첫 번째 요소를 제거하고 동시에 반환하는 방법을 알아보겠습니다. 이 작업에는 Redis의 LPOP 명령어와 BLPOP 명령어를 사용합니다.

LPOP 명령어

LPOP은 지정된 키에 저장된 리스트 값의 첫 번째(가장 왼쪽) 요소를 제거한 후, 해당 요소를 반환하는 명령어입니다.

  • 키가 존재하지 않으면 nil이 반환됩니다.
  • 키는 존재하지만 저장된 값이 리스트 타입이 아니라면 에러가 반환됩니다.

문법

redis host:port> LPOP <keyname>

출력 결과

- (string): 리스트의 첫 번째 요소
- (nil): 키가 존재하지 않는 경우
- Error: 키는 존재하지만 값이 리스트 타입이 아닌 경우

예제

Redis LPOP·BLPOP 완벽 가이드 – 리스트의 첫 번째 요소 제거하고 반환하기

BLPOP 명령어

BLPOP은 LPOP의 블로킹(blocking) 버전입니다. 일반 LPOP은 리스트가 비어 있으면 즉시 nil을 반환하지만, BLPOP은 지정된 리스트들 중 꺼낼(pop) 요소가 하나도 없으면 연산을 차단(block)한 상태로 대기합니다. 다시 말해, 지정된 모든 키가 존재하지 않거나 모든 리스트가 비어 있는 경우에 블로킹이 발생합니다.

BLPOP은 지정된 키들을 왼쪽에서 오른쪽 순서로 검사하면서, 비어 있지 않은 첫 번째 리스트의 첫 번째 요소를 제거하고 반환합니다.

동작 방식 예시

예를 들어 BLPOP list1 list2 list3 0 명령어를 실행했을 때,

  • list1: 존재하지 않음 (빈 리스트로 간주)
  • list2: 빈 리스트
  • list3: 요소 3개 포함

이 경우 list1부터 list3까지 차례로 검사한 결과, 처음으로 비어 있지 않은 리스트인 list3의 첫 번째 요소가 제거되어 반환됩니다.

블로킹 동작과 타임아웃

지정된 키가 존재하지 않거나 해당 리스트가 비어 있으면, BLPOP은 다른 클라이언트가 LPUSH, RPUSH, LINSERT 같은 명령어로 해당 키 중 하나에 새 요소를 삽입할 때까지 연산을 차단합니다. 새 요소가 들어오면 블로킹이 해제되며, 클라이언트는 키 이름꺼낸 값(popped value)을 함께 받게 됩니다.

타임아웃(timeout) 인자는 블로킹 유지 시간을 나타내는 정수값(초 단위)입니다. 지정된 시간이 만료될 때까지 어떤 키에도 삽입이 발생하지 않으면 클라이언트는 nil을 반환받으며 차단이 해제됩니다. 참고로 타임아웃을 0으로 설정하면 무기한 대기합니다.

문법

redis host:port> BLPOP <keyname-1> [ <keyname> ... ] <timeout>

출력 결과

- (array): 두 개의 요소를 가진 배열 반환
  · 첫 번째 요소: 꺼낸 값이 속한 키의 이름
  · 두 번째 요소: 실제로 꺼낸 요소 값
- (nil): 요소를 꺼내지 못한 채 타임아웃이 만료된 경우

예제

Redis LPOP·BLPOP 완벽 가이드 – 리스트의 첫 번째 요소 제거하고 반환하기

참고 자료

  1. LPOP 명령어 공식 문서
  2. BLPOP 명령어 공식 문서

마무리

지금까지 Redis 데이터 저장소에 저장된 리스트 값에서 첫 번째 요소를 제거하고 반환하는 LPOP과 BLPOP 명령어에 대해 알아보았습니다. 내용이 도움이 되셨다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!

리스트(List) 명령어 목록으로 돌아가기