티스토리 뷰

DB

[Redis] ZSet(sorted set)

snail voyager 2026. 1. 10. 01:39
728x90
반응형

Redis ZSet(sorted set, 정렬된 집합)

Set(집합)Sorted(정렬) 의 특성을 결합한 구조

각 원소(member)가 고유(unique) 하면서 동시에 score(숫자형 가중치) 를 가질 수 있고, 이 score를 기준으로 정렬된 상태로 저장

특징

  1. 중복 없음
    • 일반 Set처럼 값은 중복될 수 없음.
    • 단, 값은 유일하지만 score는 중복 가능.
  2. 정렬 유지
    • score를 기준으로 자동 정렬.
    • 동일한 score일 경우, 멤버 이름(사전순)으로 정렬.
  3. 랜덤 접근 가능
    • 순위 기반으로 접근 가능 (ex: 1등부터 10등까지).
    • score 기반으로 접근 가능 (ex: score가 50 ~ 100인 값들).
  4. 시간 복잡도
    • 내부적으로 Skip List + Hash Table 구조 사용.
    • 삽입/삭제/탐색: O(log N)
    • 순위 기반 조회: O(log N + M) (M은 가져오는 원소 개수)

활용 사례

  • 게임 리더보드 (랭킹 시스템)
  • 우선순위 큐 (priority queue)
  • 실시간 인기 검색어 (score = 검색 횟수)
  • 타임스탬프 기반 정렬 데이터 (score = unix time)

데이터 추가

ZADD leaderboard 100 "Alice"
ZADD leaderboard 200 "Bob"
ZADD leaderboard 150 "Charlie"

전체 조회 (오름차순)

ZRANGE leaderboard 0 -1 WITHSCORES

1) "Alice"   100
2) "Charlie" 150
3) "Bob"     200

내림차순 조회

ZREVRANGE leaderboard 0 -1 WITHSCORES

특정 범위 점수 조회

ZRANGEBYSCORE leaderboard 120 180 WITHSCORES

순위 확인

ZRANK leaderboard "Charlie"     # 오름차순 순위 (0부터 시작)
ZREVRANK leaderboard "Charlie"  # 내림차순 순위

점수 변경

ZINCRBY leaderboard 50 "Alice" # Alice의 점수 +50

삭제

ZREM leaderboard "Bob"
728x90
반응형

'DB' 카테고리의 다른 글

[DB] Join 순서 Driving Table, Driven Table  (0) 2025.05.06
[DB] INNER JOIN vs EXISTS  (0) 2025.05.06
[Oracle] 물리적 조인 (Physical Join)  (1) 2025.05.06
[MySQL] JSON 조회 JSON_TABLE  (0) 2025.04.29
[MySQL] JSON 조회 JSON_EXTRACT  (1) 2023.12.06
반응형
300x250