1. 개요
- Redis Sorted Set은 점수(score)로 정렬된 고유한 문자열(member) 컬렉션입니다.
- 여러 문자열이 동일한 점수를 가질 경우, 사전순으로 정렬됩니다.
1.1 주요 활용 사례
- 리더보드(Leaderboard): 대규모 온라인 게임에서 최고 점수의 순위를 쉽게 관리
- 속도 제한기(Rate Limiter): 슬라이딩 윈도우 방식의 API 요청 제한
1.2 특징
- Sorted Set은 Set과 Hash의 혼합으로 생각할 수 있습니다:
- Set처럼: 고유하고 반복되지 않는 문자열 요소로 구성
- Hash처럼: 각 요소가 부동소수점 값(점수)과 연결됨
Sorted Set의 정렬 규칙
Sorted Set의 요소는 다음 규칙에 따라 정렬됩니다:
- 점수가 다른 경우: 점수가 높은 요소가 더 큽니다 (
A.score > B.score→A > B) - 점수가 같은 경우: 사전순으로 뒤에 있는 문자열이 더 큽니다
- Sorted Set은 고유한 요소만 가지므로 동일한 문자열은 존재할 수 없습니다
2. 기본 명령어
2.1 ZADD - 요소 추가
ZADD 명령어로 점수와 함께 요소를 추가할 수 있습니다.
> ZADD racer_scores 10 "Norem"
(integer) 1
> ZADD racer_scores 12 "Castilla"
(integer) 1
> ZADD racer_scores 8 "Sam-Bodden" 10 "Royce" 6 "Ford" 14 "Prickett"
(integer) 4
- racer_scores 라는 Sorted Set에 레이서 점수를 추가했습니다.
> ZRANGE racer_scores 0 -1
1) "Ford"
2) "Sam-Bodden"
3) "Norem"
4) "Royce"
5) "Castilla"
6) "Prickett"
- ZRANGE 명령어로 레이서 점수를 조회했습니다.
ZADD의 특징
SADD와 유사하지만 점수를 추가로 받습니다- 가변 인자를 지원하여 여러 점수-값 쌍을 한 번에 추가할 수 있습니다
- 형식:
ZADD key score member [score member ...]
2.2 ZRANGE / ZREVRANGE - 범위 조회
Sorted Set은 이미 정렬되어 있어 정렬된 요소를 반환하는 것이 간단합니다.
> ZRANGE racer_scores 0 -1
1) "Ford"
2) "Sam-Bodden"
3) "Norem"
4) "Royce"
5) "Castilla"
6) "Prickett"
> ZREVRANGE racer_scores 0 -1
1) "Prickett"
2) "Castilla"
3) "Royce"
4) "Norem"
5) "Sam-Bodden"
6) "Ford"
ZRANGE: 낮은 점수부터 높은 점수 순서 (오름차순)ZREVRANGE: 높은 점수부터 낮은 점수 순서 (내림차순)0과-1은 첫 번째 요소부터 마지막 요소까지를 의미합니다
2.3 WITHSCORES - 점수와 함께 조회
> ZRANGE racer_scores 0 -1 WITHSCORES
1) "Ford"
2) "6"
3) "Sam-Bodden"
4) "8"
5) "Norem"
6) "10"
7) "Royce"
8) "10"
9) "Castilla"
10) "12"
11) "Prickett"
12) "14"