이 튜토리얼에서는 Redis의 ZREVRANGEBYLEX 명령어를 사용하여 정렬된 집합(sorted set)에서 특정 값 범위에 속한 모든 요소를 사전순 역방향(descending lexicographical order)으로 조회하는 방법을 알아봅니다.
ZREVRANGEBYLEX 명령어란?
ZREVRANGEBYLEX는 지정된 키에 저장된 정렬된 집합 값 중에서 max와 min 인자로 주어진 값(요소의 문자열 표현) 사이에 해당하는 모든 요소를 반환합니다. 이 명령어가 제대로 동작하려면 정렬된 집합의 모든 요소가 동일한 점수(score)로 삽입되어 있어야 사전순(lexicographical) 정렬이 강제됩니다. 반환되는 요소들은 사전순 역방향으로 정렬됩니다.
max와 min 인자는 반드시 ( 또는 [로 시작해야 합니다. [는 닫힌 구간(포함, inclusive)을 의미하고, (는 열린 구간(제외, exclusive)을 의미합니다. 예를 들면 다음과 같습니다.
ZREVRANGEBYLEX set [f [a
위 명령은 f >= 요소 >= a 조건을 만족하는 모든 요소를 반환합니다. 반면,
ZREVRANGEBYLEX set [f (a
위 명령은 f >= 요소 > a 조건을 만족하는 모든 요소를 반환합니다.
max와 min 인자에는 + 또는 -라는 특수 값을 사용할 수도 있습니다. +는 양의 무한대 문자열을, -는 음의 무한대 문자열을 나타냅니다. 따라서 ZREVRANGEBYLEX set + - 명령을 실행하면 해당 정렬된 집합의 모든 요소가 반환됩니다.
LIMIT(선택 사항) 인자를 함께 전달하면, offset 위치부터 count개만큼 일치하는 요소를 가져올 수 있습니다. 만약 count 값이 음수라면 offset 위치부터 모든 요소가 반환됩니다. 예를 들어:
ZREVRANGEBYLEX set [f [a LIMIT 1 3 ※ 여기서 set = [a, b, c, d, e, f, g, h]
위 명령은 두 번째 일치 요소부터 세 개의 요소를 반환합니다. 즉, 결과는 [e, d, c]입니다.
키가 존재하지 않으면 빈 집합(empty set)이 반환되며, 키는 존재하지만 저장된 값의 자료형이 정렬된 집합이 아니면 에러가 반환됩니다. Redis ZREVRANGEBYLEX 명령어의 기본 문법은 다음과 같습니다.
문법(Syntax)
redis host:port> ZREVRANGEBYLEX <keyname> <max> <min> [LIMIT offset count]
반환값(Output)
- (array) reply : 지정된 범위 내 정렬된 집합의 요소 목록 - Empty Set : 키가 존재하지 않는 경우 - Error : 키는 존재하지만 저장된 값이 정렬된 집합이 아닌 경우
예제(Example)
먼저 모든 요소를 동일한 점수 0으로 삽입한 뒤, ZREVRANGEBYLEX로 범위를 지정하여 조회해 보겠습니다.
redis host:port> ZADD myset 0 a 0 b 0 c 0 d 0 e 0 f 0 g 0 h (integer) 8 redis host:port> ZREVRANGEBYLEX myset [h [c 1) "h" 2) "g" 3) "f" 4) "e" 5) "d" 6) "c"
실행 결과를 보면 h부터 c까지의 요소가 사전순 역방향으로 반환되는 것을 확인할 수 있습니다.
참고 자료(References)
- Redis 공식 문서 – ZREVRANGEBYLEX Command Docs
지금까지 Redis ZREVRANGEBYLEX 명령어를 활용해 정렬된 집합에서 특정 범위에 속한 요소들을 사전순 역방향으로 조회하는 방법을 알아보았습니다. 이 글이 도움이 되셨다면 댓글로 의견을 남겨주시고, 주변 분들에게도 공유해 주세요!