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

2023. 7. 21. 23:02·성장이야기/TIL

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

 

'성장이야기 > TIL' 카테고리의 다른 글

Actions Runner Controller 를 이용해 self-hosted runner로 배포하기  (0) 2024.03.19
AWS EKS “instances failed to join the kubernetes cluster” Error  (0) 2024.03.12
[개발일지] 230706 Java BiFunction 인터페이스  (0) 2023.07.06
[개발일지] 230704 no main manifest attribute error (With Manifest, jar)  (0) 2023.07.04
[개발일지] 230630 Spring WebClient (Mono)  (0) 2023.06.30
'성장이야기/TIL' 카테고리의 다른 글
  • Actions Runner Controller 를 이용해 self-hosted runner로 배포하기
  • AWS EKS “instances failed to join the kubernetes cluster” Error
  • [개발일지] 230706 Java BiFunction 인터페이스
  • [개발일지] 230704 no main manifest attribute error (With Manifest, jar)
seungjjun
seungjjun
  • seungjjun
    개발이야기
    seungjjun
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 성장이야기
        • TIL
        • 주간회고
      • Java
        • Spring
        • Spring Security
      • 트러블슈팅
      • Kafka
      • OS
      • Network
      • 메가테라
      • Database
      • Algorithm
      • Git
      • HTML
      • CSS
      • 독서
      • 컴퓨터 이해하기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    메가테라
    graphQL
    이커머스 프로젝트
    항해플러스
    개발일지
    redis
    메가테라 주간회고
    항해99
    Til
    주간회고
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seungjjun
[개발일지] 230721 Redis Sorted Set(ZSET)
상단으로

티스토리툴바