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"