개념
ZSET: 중복을 허용하지 않고 자동으로 정렬되는 집합 자료구조 (Sorted Set)
구성 요소
- key : 저장되는 타이틀
- value : 저장되는 실제 데이터
- score : 해당 데이터를 정렬하기 위한 기준이 되는 숫자
장점 (DB와 비교) -> 실시간 순위 변동이 잦은 데이터 처리에 유리
- 자동 정렬 (정렬 비용이 사실상 0원)
- 점수 변경 시 순위가 즉시 반영
- TOP N 조회가 빠름 (실시간 반응성, 고성능 동시에 만족)
대표 명령어 (score가 높은 값이 자동으로 상위에 정렬)
- zadd key score value
- zincrby key score value (score만큼 증가시킴)
- zrevrange key start_idx end_idx (점수가 높은 순서로 지정된 범위만큼 가져옴)
- zrange : 오름차순으로 표시
- + withscores : score도 함께 표시
추가 명령어 : https://redis.io/docs/latest/commands/?group=sorted-set
Commands
Redis Cloud Fully managed and integrated with Google Cloud, Azure, and AWS.
redis.io
실무 사용 예시
- 실시간 인기 상품/검색어/게시물 등
- 실시간 시청 TOP10
- 그밖에 순위가 구현된 많은 것들
왜 DB로는 구현하지 않는가?
: GROUP BY, ORDER BY는 성능 소모가 매우 큰데, 데이터가 많아지면 속도가 급격하게 느려져 DB가 버티지 못함.
Time Window 개념 : 단순 누적이 아니라 데이터를 시간 단위로 관리하여 최근 데이터만 조회할 수 있도록 하는 개념. Key를 시간으로 쪼개서 관리함.
시간 단위로 데이터 관리하는 법 예시
1. 데이터 추가 (key - {score-value} {score-value} {score-value} 형식)
ZADD category_rank:2025-11-26 120 electronics 95 fashion 80 beauty 60 food 40 sports 20 book
ZADD category_rank:2025-11-27 140 electronics 110 fashion 70 beauty 90 food 50 sports 30 book
ZADD category_rank:2025-11-28 160 electronics 130 fashion 100 beauty 85 food 60 sports 25 book

2. 여러 ZSET을 하나로 묶기: (zunionstore {이름} {키 갯수} {key} {key} {key} aggregate sum)
aggregate sum: 각 카테고리의 value가 같은 것들끼리 score를 합산함
여기서 어떤 날짜까지 합산하느냐에 따라서 타임 윈도우가 정해진다. (모든 날짜를 더해버린다면 사실 의미가 없어짐)
zunionstore category_rank:recent3 3 category_rank:2025-11-26 category_rank:2025-11-27 category_rank:2025-11-28 aggregate sum

이제 최신 데이터를 조회할 수 있다.
zrevrange category_rank:recent3 0 2 withscores
1) "electronics"
2) "420"
3) "fashion"
4) "335"
5) "beauty"
6) "250"
'Redis' 카테고리의 다른 글
| [트러블슈팅] ConnectionFactory must not be null 에러 해결하기 (0) | 2026.05.06 |
|---|---|
| [Redis] Redis + RedisInsight (0) | 2026.03.27 |