Redis 배워보자-(4)

NTbell·2025년 2월 2일

ZSET(정렬된 집합) 🔢

ZSET이란?

  • 순서가 있는(Ordered) 집합, 중복 데이터 없음
  • 각 요소에 score(점수)를 부여하며, score를 기준으로 자동 정렬됨

ZSET 주요 명령어

데이터 추가 및 삭제

  • ZADD key score memberZSET에 값 추가 (점수 기준 정렬됨)
  • ZREM key memberZSET에서 특정 요소 삭제 (score는 필요 없음)

ZSET 조회 및 순위 확인

  • ZRANGE key start stop오름차순 정렬된 데이터 조회
  • ZREVRANGE key start stop내림차순 정렬된 데이터 조회
  • ZREVRANGE key start stop WITHSCORESscore 포함하여 내림차순 정렬 조회
  • ZRANK key member특정 멤버가 몇 번째인지 출력 (오름차순 기준 순위 확인)

ZSET 사용 예제

ZSET에 값 추가

ZADD memberlist 3 member1
ZADD memberlist 4 member2
ZADD memberlist 2 member3
ZADD memberlist 1 member4

오름차순 조회 (score 낮은 순서대로 조회)

ZRANGE memberlist 0 -1

내림차순 조회 (score 높은 순서대로 조회)

ZREVRANGE memberlist 0 -1

ZSET 요소 삭제

ZREM memberlist member3

특정 멤버의 순위 확인 (오름차순 기준)

ZRANK memberlist member1

Redis ZSET 활용: 최근 조회한 상품 목록

왜 ZSET을 사용할까?

  • 최근 조회한 상품 목록은 중복되면 안됨 → 같은 상품이 여러 번 추가되지 않아야 함
  • ZSET은 중복X, 순서 보장 → score를 조회 시간(초 단위)로 설정하면 최근 조회 순서대로 관리 가능

최근 조회한 상품 추가 예제

ZADD recent:products 15225 apple
ZADD recent:products 15255 banana
ZADD recent:products 15325 orange
ZADD recent:products 15400 cherry

같은 상품을 추가하면? (시간만 업데이트, 중복 제거)

ZADD recent:products 15420 cherry

➡ 기존 cherry 값의 score가 15420으로 업데이트됨

최근 본 상품 목록 3개 조회

ZREVRANGE recent:products 0 2

score 포함하여 전체 데이터 조회

ZREVRANGE recent:products 0 -1 WITHSCORES

추가적인 활용 사례

주식, 코인 등의 실시간 시세 정보 관리

  • 시세 정보는 초 단위로 변동되므로 RDB에 저장하면 부하가 큼
  • Redis ZSET을 활용하면 그 시점의 최신 시세만 유지하면서 빠르게 처리 가능
  • 또한 TTL을 적용하여 오래된 데이터는 자동 삭제할 수도 있음

게임에서 사용자 점수 및 순위 관리

  • 점수(score)를 기준으로 자동 정렬되므로 리더보드(Leaderboard) 구현에 최적화됨
  • 특정 유저의 순위를 빠르게 조회할 수 있음
profile
어떤 개발자가 되고싶나

0개의 댓글