티스토리 뷰
728x90
반응형
Redis ZSet(sorted set, 정렬된 집합)
Set(집합) 과 Sorted(정렬) 의 특성을 결합한 구조
각 원소(member)가 고유(unique) 하면서 동시에 score(숫자형 가중치) 를 가질 수 있고, 이 score를 기준으로 정렬된 상태로 저장
특징
- 중복 없음
- 일반 Set처럼 값은 중복될 수 없음.
- 단, 값은 유일하지만 score는 중복 가능.
- 정렬 유지
- score를 기준으로 자동 정렬.
- 동일한 score일 경우, 멤버 이름(사전순)으로 정렬.
- 랜덤 접근 가능
- 순위 기반으로 접근 가능 (ex: 1등부터 10등까지).
- score 기반으로 접근 가능 (ex: score가 50 ~ 100인 값들).
- 시간 복잡도
- 내부적으로 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