Redis Sorted-Set 타입과 명령어
개요
Redis의 데이터 타입 중 하나인 Sorted-Set에 대해 알아보자.
Sorted-Set 데이터 타입
- Sorted-Set 은 우선 순위대로 정렬되는 Set 자료구조이다.
- Sorted-Set 에 저장되는 각 아이템들은 score를 가지고 있으며, score가 낮은 순서대로 정렬된다.
- Sorted-Set 의 구조는 아래와 같다.
key: {(score, value1), (score, value2), ...}
예시
redis 127.0.0.1:6379> ZADD tutorials 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD tutorials 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD tutorials 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD tutorials 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD tutorials 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE tutorials 0 10 WITHSCORES
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
ZADD tutorials 1 redis
tutorials
라는 key를 갖는 Sorted-Set 에redis
라는 value를 score1
로 저장한다.
- Set 과 마찬가지로 중복되는 value 는 저장되지 않는다.
- score 가 다르더라도, 저장되지 않는다.
ZRANGE tutorials 0 10 WITHSCORES
tutorials
에 저장된 아이템을 score가 낮은 순서대로 0번째부터 10번째까지 score 값과 함께 조회한다.
주요 명령어 Reference
NO. | 명령어 | 설명 | 시간복잡도 | 비고 |
---|---|---|---|---|
1 | ZADD key score1 member1 score2 member2 … | 해당 key에 여러 member들을 score와 함께 저장한다. | 추가할 아이템마다 O(log(N)) N: Sorted-Set의 아이템 갯수 |
|
2 | ZCARD key | 해당 key에 저장된 member 갯수를 반환한다. | O(1) | |
3 | ZCOUNT key min max | 해당 key에 저장된 member 중 score 가 (min ~ max) 에 해당되는 member의 갯수를 반환한다. | O(log(N)) N: Sorted-Set의 아이템 갯수 |
|
4 | ZINCRBY key increment member | 해당 key에 저장된 member 의 score값을 increment 만큼 증가시킨다. | O(log(N)) N: Sorted-Set의 아이템 갯수 |
|
5 | ZINTERSTORE destination numkeys key1 key2 … | key들의 교집합을 destination 에 저장한다. numkeys 에는 교집합 연산을 할 Sorted-Set의 갯수를 입력해야 한다. |
O(log(N)) N: Sorted-Set의 아이템 갯수 |
|
6 | ZLEXCOUNT key min max | 모든 member 들의 score가 같은 경우, 사전순 정렬된 결과를 반환한다. 반환 범위는 min ~ max 이다. | O(log(N)) N: Sorted-Set의 아이템 갯수 |
|
7 | ZRANGE key start stop [WITHSCORES] | (start ~ stop) 까지의 member를 score 오름차순으로 반환한다. 같은 score라면 사전 오름차순으로 반환한다. | O(log(N)+M) N: Sorted-Set의 아이템 갯수 M: 반환될 아이템 갯수 |
기타 옵션이 많다. |
8 | ZRANGEBYLEX key min max [LIMIT offset count] | 모든 member 들의 score가 같은 경우, 사전순 정렬된 결과를 반환한다. 반환 범위는 min ~ max 이다. | O(log(N)+M) N: Sorted-Set의 아이템 갯수 M: 반환될 아이템 갯수 |
deprecated (비권장), ZRANGE 사용 |
9 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | score 오름차순으로 member 들을 반환한다. 반환 범위는 min ~ max 이다. | O(log(N)+M) N: Sorted-Set의 아이템 갯수 M: 반환될 아이템 갯수 |
deprecated (비권장), ZRANGE 사용 |
10 | ZRANK key member | 해당 member의 rank를 반환한다. 가장 낮은 score를 갖는다면 rank는 0이다. | O(log(N)) N: Sorted-Set의 아이템 갯수 |
|
11 | ZREM key member1 member2 … | 해당 member 들을 삭제한다. | O(M*log(N)) N: Sorted-Set의 아이템 갯수 M: 제거될 아이템 갯수 |
|
12 | ZREMRANGEBYLEX key min max | 모든 member 들의 score가 같은 경우, 사전순 정렬하여 삭제한다. 삭제 범위는 min ~ max 이다. | O(log(N)+M) N: Sorted-Set의 아이템 갯수 M: 삭제될 아이템 갯수 |
|
13 | ZREMRANGEBYRANK key start stop | rank 순으로 정렬하여 삭제한다. 삭제 범위는 min ~ max 이다. | O(log(N)+M) N: Sorted-Set의 아이템 갯수 M: 삭제될 아이템 갯수 |
|
14 | ZREMRANGEBYSCORE key min max | score 순으로 정렬하여 삭제한다. 삭제 범위는 min ~ max 이다. | O(log(N)+M) N: Sorted-Set의 아이템 갯수 M: 삭제될 아이템 갯수 |
|
15 | ZREVRANGE key start stop [WITHSCORES] | (start ~ stop) 까지의 member를 score 내림차순으로 반환한다. 같은 score라면 사전 내림차순으로 반환한다. | O(log(N)+M) N: Sorted-Set의 아이템 갯수 M: 반환될 아이템 갯수 |
deprecated (비권장), ZRANGE 사용 |
16 | ZREVRANGEBYSCORE key max min [WITHSCORES] | (start ~ stop) 까지의 member를 score 내림차순으로 반환한다. 같은 score라면 사전 내림차순으로 반환한다. | O(log(N)+M) N: Sorted-Set의 아이템 갯수 M: 반환될 아이템 갯수 |
deprecated (비권장), ZRANGE 사용 |
17 | ZREVRANK key member | 해당 member의 rank를 거꾸로 계산하여 반환한다. | O(log(N)) N: Sorted-Set의 아이템 갯수 |
deprecated (비권장), ZRANGE 사용 |
18 | ZSCORE key member | 해당 member의 score를 반환한다. | O(1) | |
19 | ZSCAN key cursor [MATCH pattern] [COUNT count] | 해당 key의 몇 개 member 반환 | O(1) 단, 모든 아이템을 조회한 경우 총 O(N) |