이 튜토리얼에서는 Redis의 ZREMRANGEBYRANK 명령어를 사용하여 정렬된 집합(sorted set) 값에서 특정 순위(rank) 범위에 해당하는 요소들을 제거하는 방법을 알아봅니다.
ZREMRANGEBYRANK 명령어란?
ZREMRANGEBYRANK 명령어는 정렬된 집합 값에서 start와 stop 인자로 지정한 순위 범위 사이에 있는 모든 요소를 제거합니다.
start와 stop은 0 기반(zero-based) 인덱스입니다. 즉, 0은 가장 낮은 점수를 가진 요소를, 1은 두 번째로 낮은 점수를 가진 요소를 의미하며, 이런 식으로 순서가 매겨집니다. 음수 값도 사용할 수 있으며, 이 경우 가장 높은 점수를 가진 요소부터 역순으로 계산됩니다. 예를 들어 -1은 가장 높은 점수의 요소, -2는 두 번째로 높은 점수의 요소를 의미합니다.
단, 키가 존재하지만 해당 키에 저장된 값이 정렬된 집합 타입이 아닌 경우에는 에러가 반환됩니다.
문법
redis host:post> ZREMRANGEBYRANK <keyname> <start> <stop>
반환값
- (integer) 제거된 요소의 개수 - 0 : 키가 존재하지 않는 경우 - Error : 키가 존재하지만 저장된 값이 정렬된 집합이 아닌 경우
실전 예제
간단한 리더보드(leaderboard) 예시로 동작을 확인해 보겠습니다.
# 점수와 함께 멤버 추가 redis host:post> ZADD leaderboard 50 "player1" 80 "player2" 95 "player3" 120 "player4" (integer) 4 # 점수가 가장 낮은 2개 요소(순위 0~1) 제거 redis host:post> ZREMRANGEBYRANK leaderboard 0 1 (integer) 2 # 남은 요소 확인 redis host:post> ZRANGE leaderboard 0 -1 WITHSCORES 1) "player3" 2) "95" 3) "player4" 4) "120"
위 예제에서 점수가 가장 낮은 player1과 player2가 제거되고, 나머지 요소만 집합에 남게 됩니다. 이처럼 ZREMRANGEBYRANK는 게임 랭킹 관리나 오래된 하위 데이터 정리 등에 유용하게 활용할 수 있습니다.
참고 자료
- ZREMRANGEBYRANK 공식 문서 (Redis Docs)
지금까지 정렬된 집합 값에서 특정 순위 범위에 해당하는 요소를 제거하는 방법을 살펴보았습니다. 도움이 되셨다면 댓글로 의견을 남겨주시고, 주변에도 공유해 주세요!