이 튜토리얼에서는 Redis 데이터 저장소에 저장된 정렬된 집합(Sorted Set) 값에서 가장 낮은 점수를 가진 요소를 제거하고 반환하는 방법을 ZPOPMIN과 BZPOPMIN 명령어를 통해 살펴보겠습니다.
ZPOPMIN 명령어란?
ZPOPMIN 명령어는 지정된 키에 저장된 정렬된 집합 값에서 가장 낮은 점수를 가진 하나 이상의 요소를 제거하고 반환합니다. 이 명령어는 count라는 인자를 받으며, 이 값은 정렬된 집합에서 제거할 요소의 총 개수를 의미합니다. count를 지정하지 않으면 기본값인 1이 적용됩니다. 요소가 반환될 때는 가장 낮은 점수를 가진 요소가 맨 먼저 반환되고, 이후 점수가 높은 순서대로 이어집니다.
키는 존재하지만 해당 키에 저장된 값이 정렬된 집합 타입이 아닌 경우에는 에러(Error)가 반환되며, 키 자체가 존재하지 않는 경우에는 Nil이 반환됩니다.
문법
redis host:post> ZPOPMIN <keyname> <count>
출력 결과
- (array): 정렬된 집합의 요소와 점수를 담은 배열 - (nil): 키가 존재하지 않는 경우 - Error: 키는 존재하지만 저장된 값이 정렬된 집합 타입이 아닌 경우
예제

BZPOPMIN 명령어란?
BZPOPMIN 명령어는 ZPOPMIN의 블로킹(Blocking) 버전입니다. 지정된 정렬된 집합들 중에서 팝(pop)할 요소가 없으면 작업이 차단됩니다. 다시 말해, 지정된 모든 정렬된 집합이 비어 있거나 지정된 모든 키가 존재하지 않을 때 작업이 대기 상태가 됩니다.
이 명령어는 지정된 키들을 왼쪽에서 오른쪽 순서로 검사하면서, 가장 먼저 발견되는 비어 있지 않은 정렬된 집합에서 최저 점수 요소를 제거하고 반환합니다. 예를 들어 BZPOPMIN set1 set2 set3 0 명령어를 실행했을 때, 키 set1이 존재하지 않고(빈 집합으로 간주), set2는 빈 집합이며, set3에는 세 개의 요소가 있다면, set1부터 set3까지 검사하는 과정에서 처음으로 비어 있지 않은 집합인 set3의 최저 점수 요소가 제거되어 반환됩니다.
이 명령어는 timeout(정수) 인자를 받으며, 이는 작업을 차단할 수 있는 최대 시간(초)을 나타냅니다. timeout 값을 0으로 설정하면 무기한으로 차단할 수 있습니다.
문법
redis host:post> BZPOPMIN <keyname> [ <keyname> ] <timeout>
출력 결과
- (array): 세 개의 요소가 담긴 배열. 첫 번째 요소는 정렬된 집합 키의 이름, 두 번째 요소는 팝된 요소의 점수, 세 번째 요소는 팝된 요소 자체입니다. - (nil): 요소를 팝하지 못한 상태로 타임아웃이 만료된 경우
예제

참고 자료
- ZPOPMIN 공식 문서
- BZPOPMIN 공식 문서
지금까지 Redis 데이터 저장소에 저장된 정렬된 집합 값에서 가장 낮은 점수의 요소를 제거하고 반환하는 방법을 알아보았습니다. 내용이 유용했다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!