티스토리 뷰

Sorted Set이란?

Sorted Set은 Redis 자료구조 중 하나로 하나의 키에 여러 score와 member로 구성된 데이터를 관리한다. 각 member에 실수값인 score를 부여하며 score를 기준으로 정렬된 상태를 유지하는 집합이다. member는 고유값이며 서로 다른 member는 동일한 score를 가질 수 있다. score가 동일한 경우 member의 사전순(lexicographical order)으로 정렬된다.

문법 표기법

아래 문법 설명 중 옵션 표기에 대한 설명이다.

  • []로 감싼 항목은 선택적(optional) 옵션이며 생략 가능하다.
  • |는 둘 중 하나만 선택 가능함을 의미한다.

학생 성적 예시

key score member
exam_results 72 charlie
exam_results 85 bob
exam_results 85 dave
exam_results 93 alice

ZADD

의미: 멤버를 추가하거나 score를 갱신한다. 반환 값은 새로 추가된 멤버 수

문법: ZADD key [NX|XX] [GT|LT] [CH] score member

  • 옵션은 key 뒤 score 앞에 지정 가능 (| 기준 하나의 옵션만 지정 가능)
  • NX(Not eXists) — 멤버가 존재하지 않을 때만 추가
  • XX(eXists) — 멤버가 이미 존재할 때만 갱신
  • GT(Greater Than) — 새 score가 기존보다 클 때만 갱신 (member가 존재하지 않은 경우 새로 추가)
  • LT(Less Than) — 새 score가 기존보다 작을 때만 갱신 (member가 존재하지 않은 경우 새로 추가)
  • CH(Changed) — 반환 값을 새로 추가된 멤버 수 + score가 바뀐 멤버 수로 변경

예시:

ZADD exam_results 85 "bob"
ZADD exam_results NX 85 "bob"
ZADD exam_results XX GT 90 "bob"
ZADD exam_results XX GT CH 90 "bob"

ZINCRBY

의미: 멤버의 score를 지정한 값만큼 증가시킨다. 멤버가 없으면 해당 score로 새로 추가한다.

문법: ZINCRBY key increment member

예시:

ZADD exam_results 85 "bob"

# score 증가
ZINCRBY exam_results 10 "bob"
# 85 + 10 = 95

# 음수로 감소도 가능
ZINCRBY exam_results -20 "bob"
# 95 - 20 = 75

# 존재하지 않는 멤버 → score 0에서 시작하여 increment 적용
ZINCRBY exam_results 88 "alice"
# 0 + 88 (새로 추가)

ZSCORE

의미: 멤버의 score를 반환한다.

문법: ZSCORE key member

예시:

ZADD exam_results 85 "bob" 93 "alice"

ZSCORE exam_results "bob"
# "85"

# 존재하지 않는 멤버
ZSCORE exam_results "unknown"
# (nil)

ZCARD

의미: Sorted Set의 전체 멤버 수를 반환한다. (CARD = Cardinality, 집합의 원소 수)

문법: ZCARD key

예시:

ZADD exam_results 85 "bob" 93 "alice" 72 "charlie"

ZCARD exam_results
# (integer) 3

ZRANK

의미: score 오름차순 기준 멤버의 순위를 반환한다. 0부터 반환한다. 멤버가 존재하지 않으면 (nil)을 반환한다.

문법: ZRANK key member

예시:

ZADD exam_results 72 "charlie" 85 "bob" 93 "alice"

# charlie가 score 최저 → 오름차순 0등
ZRANK exam_results "charlie"
# (integer) 0

ZRANK exam_results "bob"
# (integer) 1

ZRANK exam_results "alice"
# (integer) 2

# 존재하지 않는 멤버
ZRANK exam_results "unknown"
# (nil)

ZREVRANK

의미: score 내림차순 기준 멤버의 순위를 반환한다. (REV = Reverse) 0부터 반환한다.

문법: ZREVRANK key member

예시:

ZADD exam_results 72 "charlie" 85 "bob" 93 "alice"

# alice가 score 최고 → 내림차순 0등
ZREVRANK exam_results "alice"
# (integer) 0

ZREVRANK exam_results "bob"
# (integer) 1

ZREVRANK exam_results "charlie"
# (integer) 2

ZRANGE

의미: score 오름차순으로 인덱스 범위의 멤버를 조회한다. stop이 -1이면 끝까지 조회. Redis 6.2부터 BYSCORE, BYLEX, REV, LIMIT 옵션이 추가되어 ZREVRANGE, ZRANGEBYSCORE, ZREVRANGEBYSCORE 등을 대체하는 통합 명령어가 되었다.

문법: ZRANGE key min max [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

  • BYSCORE — min, max를 score 범위로 해석. +inf, -inf로 무한대 지정 가능. (를 접두어로 붙이면 해당 값 미포함(exclusive)
  • BYLEX — min, max를 사전순 범위로 해석. [는 포함, (는 미포함, +, -는 최대/최소
  • REV — 내림차순 정렬 (ZREVRANGE 대체)
  • LIMIT offset countBYSCORE 또는 BYLEX와 함께 사용. offset만큼 건너뛴 후 count개 반환
  • WITHSCORES — 멤버와 함께 score도 반환

예시:

ZADD exam_results 72 "charlie" 85 "bob" 85 "dave" 93 "alice"

# 기본: 오름차순 전체 조회
ZRANGE exam_results 0 -1 WITHSCORES
# 1) "charlie"  2) "72"
# 3) "bob"      4) "85"
# 5) "dave"     6) "85"
# 7) "alice"    8) "93"

# 내림차순 전체 조회 (ZREVRANGE 대체)
ZRANGE exam_results 0 -1 REV WITHSCORES
# 1) "alice"    2) "93"
# 3) "dave"     4) "85"
# 5) "bob"      6) "85"
# 7) "charlie"  8) "72"

# score 범위 조회 (80~95점)
ZRANGE exam_results 80 95 BYSCORE WITHSCORES
# 1) "bob"    2) "85"
# 3) "dave"   4) "85"
# 5) "alice"  6) "93"

# score 범위 + exclusive (80 초과 ~ 95 미만)
ZRANGE exam_results (80 (95 BYSCORE WITHSCORES
# 1) "bob"   2) "85"
# 3) "dave"  4) "85"

# score 범위 + LIMIT (상위 2명)
ZRANGE exam_results -inf +inf BYSCORE LIMIT 0 2
# 1) "charlie"
# 2) "bob"

# 사전순 범위 조회 (score가 동일한 멤버 중 필터링)
ZRANGE exam_results [b [d BYLEX
# 1) "bob"
# 2) "charlie"

ZREVRANGE

의미: score 내림차순으로 인덱스 범위의 멤버를 조회한다. stop이 -1이면 끝까지 조회. Redis 6.2부터 deprecated되었으며 ZRANGEREV 옵션으로 대체 가능하다.

문법: ZREVRANGE key start stop [WITHSCORES]

예시:

ZADD exam_results 72 "charlie" 85 "bob" 93 "alice"

# 전체 조회 (내림차순)
ZREVRANGE exam_results 0 -1 WITHSCORES
# 1) "alice"
# 2) "93"
# 3) "bob"
# 4) "85"
# 5) "charlie"
# 6) "72"

# 상위 2명만
ZREVRANGE exam_results 0 1
# 1) "alice"
# 2) "bob"

# ZRANGE REV로 대체
ZRANGE exam_results 0 -1 REV WITHSCORES

ZREM

의미: 지정된 멤버를 삭제한다. (REM = Remove) 실제로 삭제된 멤버 수가 반환된다.

문법: ZREM key member [member ...]

예시:

ZADD exam_results 72 "charlie" 85 "bob" 93 "alice"

# 단일 삭제
ZREM exam_results "charlie"
# (integer) 1

# 여러 멤버 삭제
ZREM exam_results "bob" "alice"
# (integer) 2

# 존재하지 않는 멤버 삭제 시도
ZREM exam_results "unknown"
# (integer) 0
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함