[개발일지] 230721 Redis Sorted Set(ZSET)

Redis Sorted Set


Redis의 Sorted Set(ZSET) 자료구조에 대해 알아보자.

Sorted Set은 저장된 데이터의 정렬된 순서를 가지는 집합 데이터 구조이다. Set 구조이기 때문에 각 멤버(member)에 대해 고유한 식별자(key)와 함께 점수(score)를 지정하여 데이터를 저장한다.

아래 그림을 보면 구조를 파악하기 쉽다. key안에 고유한 member가 존재하고 각 member에 대한 점수가 있다.

 

https://server-talk.tistory.com/485

 

만일 동일한 점수가 존재할 경우 member의 사전순으로 정렬을 한다.

 

Sorted Set 특징


  • 정렬된 순서: Sorted Set의 멤버는 각 멤버의 점수를 기준으로 오름차순에 따라 정렬되어 저장된다
  • 고유한 멤버: Sorted Set은 각 멤버를 식별자로 구분할 수 있어 중복되지 않는 고유한 멤버들로 구성되어 동일한 멤버를 중복 저장할 수 없다.
  • 멤버의 점수: Sorted Set의 각 멤버는 순위 또는 점수를 가지고 있는데, 이 점수를 사용하여 멤버들을 정렬하고 순위를 나타낼 수 있다. 만일 동일한 점수의 멤버가 저장될 시 멤버의 사전순으로 정렬한다.
  • 범위 조회: Sorted Set에서는 멤버들은 순위에 따라 정렬되어 저장되므로, 특정 순위 범위 내의 멤버들을 조회하거나, 특정 멤버의 순위를 확인할 수 있다.

 

Sorted Set 자료구조를 사용하면 좋은 경우


Sorted Set의 특징을 고려했을 때 Sorted Set 자료구조는 순위가 필요한 랭킹을 구현할 때 가장 적합하다고 생각이 된다.

따로 정렬을 하는 작업을 해주지 않아도 각 멤버에 대해 점수가 부여되어 점수에 따라 정렬되기 때문에 자동으로 순위가 정해지기 때문에 편리하고 Redis의 In-Memory 기반의 db라는 점을 고려했을 때 순위 데이터를 가져오는데 특화되어 있다고 생각한다.

 

Sorted Set 명령어


ZRANGE

ZRANGE 명령어는 sorted set에서 지정된 범위의 데이터를 조회하는 데 사용된다. 순위 범위를 지정하여 해당 범위 안의 데이터를 가져올 수 있다.

선택 옵션인 WITHSCORES 명령어 까지 같이 입력해 주면 해당 멤버의 점수도 같이 출력된다.

ZRANGE key start stop [WITHSCORES]

 

ZRANK

ZRANK 명령어는 지정된 멤버의 순위를 가져오는 데 사용된다. 순위는 가장 낮은 값이 0부터 시작한다.

ZRANK key member

 

ZSCORE

ZSCORE 명령어는 지정된 멤버의 점수를 가져오는 데 사용된다.

ZSCORE key member

 

ZRANGEBYSCORE

ZRANGEBYSCORE 명령어는 지정된 점수 범위(min, max) 내의 데이터를 조회하는 데 사용한다.

WITHSCORES와 LIMITE offset count은 선택옵션으로 WITHSCORES는 점수도 같이 표시하는 명령어

LIMITE offset count은 범위내의 일치하는 요소를 가져오는 데 사용할 수 있다. SQL의 SELECT LIMIT 명령어와 비슷하다고 생각하면 편하다.

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

 

Reference

https://redis.io/docs/data-types/sorted-sets/

 

Redis sorted sets

Introduction to Redis sorted sets

redis.io