[Redis] Sorted Set : 기본 명령어

Sorted Set

Redis의 Sorted Set은 말 그대로 정렬된 집합을 표현하는 자료구조로, 각 요소는 고유한 멤버스코어 한 쌍으로 이루어진다. 스코어는 멤버의 순서를 결정하는 데 사용된다. Sorted Set의 대표적인 기능으로 멤버의 추가, 삭제, 검색을 제공하며, 스코어를 기반으로 한 업데이트, 조회 또한 제공한다. 

 

Sorted Set의 특성은 다음과 같다 :

1. 고유한 멤버 : 멤버는 고유한 값으로 구성된다.

2. 정렬된 상태로 저장 : 스코어에 따라 정렬되어 저장된다.

3. 빠른 조회 : 내부적으로 skip list로 구현되어 있어 조회 시 O(log(N))의 시간 복잡도를 갖는다.

4. 유연한 조회 : 스코어 기준으로도 멤버를 조회 가능하다.

 

Sorted Set의 이러한 특성은 랭킹 시스템의 리더보드, 우선순위 큐, 세컨더리 인덱싱 구현에 유용하게 사용된다.

 

주요 명령어

다음은 Redis에서 Sorted Set을 사용하는 몇 가지 기본적인 명령어와 그 예시이다.
공식 사이트가 매우 친절하다. 커맨드를 날려보며 학습할 수 있어서 매우 유용하다. 

 

ZADD

멤버 추가

ZADD key score member [score member ...]

ZADD myzset 1 helloworld

 

ZREM

멤버 제거

ZREM key member [member ...]

ZREM myzset helloworld

 

ZSCORE

멤버 스코어 반환

ZSCORE key member

ZSCORE myzset helloworld

 

ZINCRBY

스코어 증가. 멤버가 없다면 생성 (increase or insert)

ZINCRBY key increment member

ZINCRBY myzset 100 helloworld

 

ZCOUNT

주어진 스코어 범위 내의 멤버 수 반환

ZCOUNT key min max

ZCOUNT myzset 100 200

 

다음과 같이 스코어와 +inf를 사용하면 스코어 100의 내림차순 등수를 계산할 수 있다.

ZINCRBY myzset 100 +inf

 

ZRANK

멤버 순위 계산. 낮은 스코어부터 0번 순위 부여하며 동점시 멤버를 사전순으로 다시 정렬해서 순위를 부여한다.

ZRANK key member

ZRANK myzset helloworld

 

ZREVRANK

멤버 역순위 계산. 높은 스코어부터 0번 순위 부여

ZREVRANK key member

ZREVRANK myzset helloworld

 

ZRANGE

지정된 범위 값으로 멤버를 검색한다.

기본적으로 순위 기반 검색이며 BYSCORE 옵션을 명시하면 스코어 기반으로 검색한다.

ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count]   [WITHSCORES]

ZRANGE myzset 0 1
ZRANGE myzset 90 100 BYSCORE

 

ZREVRANGE

지정된 범위 값으로 멤버를 역순으로 조회한다. ZRANGE의 반대 개념으로 ZRANGE에 REV 옵션을 명시하는 것과 동일하다. 6.2.0부터 Deprecated 되었으니 가급적 ZRANGE를 사용하자.

ZREVRANGE key start stop [WITHSCORES]

ZREVRANGE myzset helloworld 0 1

 

ZRANGEBYLEX

멤버의 사전식 순서를 기준으로 특정 문자열 범위 내에 있는 멤버를 조회한다. ZRANGE의 BYLEX 옵션을 명시하는 것과 동일하다. 6.2.0부터 Deprecated 되었으며 주의 사항으로 모든 멤버가 같은 스코어를 가질 때 유효하다.

ZRANGEBYLEX key min max [LIMIT offset count]

ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
ZRANGEBYLEX myzset [a [b
1) "a"
2) "b"