Sorted Set
Sorted Set은 유니크한 멤버들을 가지는 컬렉션으로, 각 멤버는 부동 소수점 숫자인 스코어(score)와 연결되어 있다. 이 스코어를 기반으로 멤버들이 자동으로 정렬된다. Sorted Set은 리더보드, 우선순위 큐 등 다양한 곳에 활용될 수 있다.
Sorted Set은 다음과 같은 특징을 갖는다.
- 고유한 값 저장
각 멤버는 Sorted Set 내에서 유일한 값을 갖는다.
- 자동 정렬
멤버들은 스코어에 따라 자동으로 정렬된다. 스코어가 낮은 멤버부터 높은 멤버 순으로 정렬된다. 같은 스코어를 가진 멤버는 데이터의 사전 순으로 정렬돼 저장된다.
- 빠른 접근 시간
멤버 추가, 삭제, 스코어 업데이트, 랭크 조회 등의 작업은 O(log(N)) 시간에 처리된다. (N은 Sorted Set의 멤버 수)
따라서, 인덱스를 다루는 경우 O(n)으로 접근하는 list 보다 sorted set이 더 효율 적이다.
- 범위 기반 조회
스코어 범위나 랭크 범위에 따라 멤버들을 조회할 수 있다.
명령어 (Command)
ZADD
설명: Sorted Set에 멤버를 추가한다. 한 번에 여러 아이템을 입력할 수 있고, 각 아이템은 저장되는 동시에 스코어 값으로 정렬된다.
사용 예제:
> ZADD shibaholic 100 white
(integer) 1
> ZADD shibaholic 200 black 300 red
(integer) 2
저장하는 데이터가 이미 sorted set에 존재하면 스코어만 업데이트된다.
ZADD는 다음과 같은 옵션을 사용할 수 있다.
- NX: 멤버가 이미 존재하지 않을 경우에만 추가한다. 즉, 새로운 멤버만 추가하고, 기존 멤버의 스코어는 업데이트하지 않는다.
- XX: 멤버가 이미 존재할 경우에만 스코어를 업데이트한다. 즉, 새로운 멤버는 추가하지 않는다.
- CH: 변경된 멤버의 수를 반환한다. 기본적으로 ZADD는 추가된 새로운 멤버의 수만 반환하지만, CH 옵션을 사용하면 스코어가 업데이트된 멤버의 수도 포함하여 반환한다.
- INCR: 스코어를 증가시키는 데 사용된다. 이 옵션을 사용하면 ZADD는 Sorted Set에 단일 멤버와 스코어만을 받아 해당 멤버의 스코어를 증가시키고, 최종 스코어를 반환한다. 이 옵션을 사용할 때는 한 번에 하나의 멤버만 업데이트할 수 있다.
- LT: 새로운 스코어가 기존 스코어보다 작은 경우에만 기존 요소를 업데이트한다.
- GT: 새로운 스코어가 현재 스코어보다 큰 경우에만 기존 요소를 업데이트한다.
ZRANGE
설명:
스코어가 낮은 순으로 정렬된 상태에서, 지정된 범위의 멤버들을 조회한다.
사용 예제:
> ZRANGE shibaholic 0 1
1) "white"
2) "black"
> ZRANGE shibaholic 0 1 WITHSCORES
1) "white"
2) "100"
3) "black"
4) "200"
> ZRANGE shibaholic 0 1 WITHSCORES REV
1) "red"
2) "300"
3) "black"
4) "200"
> ZRANGE shibaholic 150 250 BYSCORE WITHSCORES
1) "black"
2) "200"
> ZRANGE shibaholic 100 300 BYSCORE WITHSCORES
1) "white"
2) "100"
3) "black"
4) "200"
5) "red"
6) "300"
> ZRANGE shibaholic (100 (300 BYSCORE WITHSCORES
1) "black"
2) "200"
> ZRANGE shibaholic 100 +inf BYSCORE WITHSCORES
1) "white"
2) "100"
3) "black"
4) "200"
5) "red"
6) "300"
> ZRANGE shibaholic -inf 300 BYSCORE WITHSCORES
1) "white"
2) "100"
3) "black"
4) "200"
5) "red"
6) "300"
> ZADD shibaholic 0 white 0 black 0 red 0 orange 0 blue
(integer) 2
> ZRANGE shibaholic (b (w BYLEX
1) "black"
2) "blue"
3) "orange"
4) "red"
예제에서 나오는 0 1은 검색하고자 하는 첫 번째와 마지막 인덱스를 의미한다.
음수 인덱스 사용이 가능하며, 0 -1을 입력하는 경우 sorted set에 저장된 모든 데이터를 조회한다는 의미이다.
ZRANGE는 다음과 같은 옵션을 사용할 수 있다.
- WITHSCORES: 데이터와 함께 스코어 값이 차례대로 출력된다.
- REV: 데이터가 역순으로 출력된다.
- BYSCORE: 스코어를 이용해 데이터를 조회할 수 있다. 인자 값으로 조회하고자 하는 최소, 최대 스코어를 전달하면 전달한 스코어를 포함한 값을 조회한다. 인수로 전달하는 스코어에 '(' 문자를 추가하면 해당 스코어를 포함하지 않는 값만 조회할 수 있다.
- -inf, +inf: 최솟값과 최댓값을 표현한다. 특정 스코어보다 작거나 큰 모든 값을 출력할 때 이용한다.
- BYLEX: 사전 순으로 범위를 조회한다. 스코어가 같을 때 BYLEX 옵션을 사용하면 사전식 순서를 이용해 특정 아이템을 조회할 수 있다. 입력한 문자열을 포함하려면 '(' 문자를, 포함하지 않을 때는 '[' 문자를 사용한다.
ZREVRANGE
설명: 스코어가 높은 순으로 정렬된 상태에서, 지정된 범위의 멤버들을 조회한다.
사용 예제:
> ZREVRANGE shibaholic 0 1
1) "red"
2) "black"
> ZREVRANGE shibaholic 0 1 WITHSCORES
1) "red"
2) "300"
3) "black"
4) "200"
ZREM
설명: 멤버를 삭제한다.
사용 예제:
> ZREM shibaholic black
(integer) 1
ZSCORE
설명: 지정된 멤버의 스코어를 조회한다.
사용 예제:
> ZSCORE shibaholic red
"300"
ZRANK / ZREVRANK
설명: 멤버의 랭크(위치)를 조회한다. ZRANK는 낮은 스코어부터, ZREVRANK는 높은 스코어부터 계산한다.
사용 예제:
> ZRANK shibaholic 'white'
(integer) 0
> ZRANK shibaholic 'black'
(integer) 1
> ZRANK shibaholic 'red'
(integer) 2
> ZREVRANK shibaholic 'white'
(integer) 2
> ZREVRANK shibaholic 'black'
(integer) 1
> ZREVRANK shibaholic 'red'
(integer) 0
ZINCRBY
설명:
지정된 값으로 멤버의 스코어를 증가시킨다.
사용 예제:
> ZINCRBY shibaholic 100 red
"400"
ZRANGEBYSCORE / ZREVRANGEBYSCORE
설명: 스코어 범위에 해당하는 멤버들을 조회한다. ZRANGEBYSCORE는 낮은 스코어부터, ZREVRANGEBYSCORE는 높은 스코어부터 조회한다.
사용 예제:
> ZRANGEBYSCORE shibaholic 100 200
1) "white"
2) "black"
> ZREVRANGEBYSCORE shibaholic 200 100
1) "black"
2) "white"
REFERENCE
https://redis.io/docs/latest/develop/data-types/sorted-sets/
https://redis.io/docs/latest/commands/?group=sorted-set
'SQL > Redis' 카테고리의 다른 글
Redis 기본 사용자 접근을 막고 아이디 비밀번호 적용하기 (ACL) (0) | 2024.06.15 |
---|---|
Redis Set 타입 특징 및 자주 쓰는 명령어 알아보기 (0) | 2024.04.07 |
Redis String 타입 특징 및 자주 쓰는 명령어 알아보기 (0) | 2024.02.12 |
댓글