Redis Sorted Set 실습: 정렬된 데이터를 효율적으로 처리하기

2024. 9. 11. 10:40·DB/Redis

다음은 Redis 명령어를 통해 Sorted Set을 다루는 방법에 대한 설명입니다.


1. ZADD: 값 추가

zadd "game1:scores" 100 user1 200 user2 300 user3
  • 설명: ZADD 명령어는 Sorted Set에 값과 점수를 추가합니다.
  • 사용법: zadd key score member [score member ...]
  • 동작: "game1:scores"라는 ZSET에 user1, user2, user3라는 값을 각각 100, 200, 300의 점수와 함께 추가합니다.
  • 결과: (integer) 3 - 세 개의 값이 성공적으로 추가되었습니다.

2. ZRANGE: 범위 내의 값 조회 (점수 기준)

zrange game1:scores 0 +inf byscore limit 0 10
  • 설명: ZRANGE는 Sorted Set에서 범위 내의 값을 조회하는 명령어입니다.
  • 사용법: zrange key min max byscore [limit offset count]
  • 동작: "game1:scores" ZSET에서 점수를 기준으로 오름차순으로 정렬된 값들을 반환합니다. limit 0 10은 상위 10개의 값을 반환합니다.
  • 결과: user4, user1, user5, user2, user3, user6의 값이 반환됩니다.

3. ZRANGE withscores: 점수와 함께 값 조회

zrange game1:scores 0 +inf byscore limit 0 10 withscores
  • 설명: ZRANGE 명령어에 WITHSCORES 옵션을 추가하면 각 값과 함께 그 값의 점수도 조회할 수 있습니다.
  • 동작: "game1:scores"에서 점수와 함께 오름차순으로 상위 10개의 값을 반환합니다.
  • 결과: 각 사용자의 점수와 함께 user4: 50, user1: 100, user5: 150 등이 반환됩니다.

4. ZRANGE 역순 조회

zrange game1:scores +inf 0 byscore rev limit 0 10 withscores
  • 설명: REV 옵션을 추가하면 점수를 기준으로 내림차순으로 값을 조회합니다.
  • 동작: "game1:scores"에서 점수를 내림차순으로 정렬된 상위 10개의 값과 점수를 반환합니다.
  • 결과: 가장 높은 점수를 가진 user6: 350, user3: 300, user2: 200 등이 반환됩니다.

5. ZREM: 값 삭제

zrem game1:scores user3
  • 설명: ZREM은 Sorted Set에서 특정 값을 삭제하는 명령어입니다.
  • 사용법: zrem key member
  • 동작: "game1:scores"에서 user3을 삭제합니다.
  • 결과: (integer) 1 - 값이 성공적으로 삭제되었음을 나타냅니다.

6. ZCARD: Sorted Set 크기 조회

zcard game1:scores
  • 설명: ZCARD 명령어는 Sorted Set에 저장된 값의 개수를 반환합니다.
  • 사용법: zcard key
  • 동작: "game1:scores" ZSET에 몇 개의 값이 있는지 조회합니다.
  • 결과: (integer) 5 - 현재 5개의 값이 저장되어 있음을 의미합니다.

7. ZINCRBY: 점수 증가

zincrby game1:scores 500 user4
  • 설명: ZINCRBY 명령어는 Sorted Set에서 특정 값의 점수를 증가시키는 명령어입니다.
  • 사용법: zincrby key increment member
  • 동작: "game1:scores"에서 user4의 점수를 500만큼 증가시킵니다.
  • 결과: "550" - user4의 새로운 점수가 반환됩니다.

주요 사용 패턴 요약

1. 값 추가 및 점수 할당: ZADD

  • 값을 Sorted Set에 추가하고, 각 값에 점수를 할당합니다.

2. 값 조회: ZRANGE

  • 점수 기준으로 범위 내의 값을 조회하고, WITHSCORES 옵션을 통해 점수도 함께 반환할 수 있습니다.
  • REV 옵션을 사용하여 내림차순으로 조회할 수 있습니다.

3. 값 삭제: ZREM

  • 특정 값을 Sorted Set에서 삭제합니다.

4. 점수 증가: ZINCRBY

  • 특정 값의 점수를 증가시키고, 업데이트된 점수를 반환합니다.

5. 전체 값의 개수 조회: ZCARD

  • Sorted Set에 저장된 값들의 개수를 조회합니다.

자바 코드 실습.

1. Sorted Set에 데이터 추가 (ZADD)

var scores = new HashMap<String, Double>();
scores.put("users1", 100.0);
scores.put("users2", 30.0);
scores.put("users3", 50.0);
scores.put("users4", 80.0);
scores.put("users5", 15.0);

jedis.zadd("game2:scores", scores);
  • 설명: HashMap<String, Double>을 통해 사용자와 점수 쌍을 설정한 후, jedis.zadd 메서드를 사용하여 "game2:scores"라는 Sorted Set에 이 데이터를 추가합니다.
  • 목적: Sorted Set은 점수를 기준으로 값이 자동으로 정렬되기 때문에, 게임의 점수나 순위 관리를 간단하게 구현할 수 있습니다.

2. Sorted Set 데이터 조회 (ZRANGE)

List<String> zrange = jedis.zrange("game2:scores", 0, Long.MAX_VALUE);
zrange.forEach(System.out::println);
  • 설명: zrange 명령어는 Sorted Set에서 지정된 범위 내의 값을 반환합니다. 여기서는 0부터 마지막 값까지의 범위를 지정하여 Sorted Set에 저장된 모든 데이터를 조회합니다.
  • 목적: Sorted Set에서 점수에 따라 오름차순으로 정렬된 사용자를 조회합니다.

3. Sorted Set의 크기 확인 (ZCARD)

System.out.println(jedis.zcard("game2:scores"));
  • 설명: zcard 명령어는 Sorted Set에 저장된 값의 개수를 반환합니다.
  • 목적: 현재 "game2:scores" Sorted Set에 저장된 사용자의 수를 확인할 수 있습니다.

4. 점수 증가 (ZINCRBY)

jedis.zincrby("game2:scores", 100.0, "users5");
  • 설명: zincrby 명령어는 특정 값(여기서는 users5)의 점수를 지정된 양(여기서는 100)만큼 증가시킵니다.
  • 목적: users5의 점수를 100만큼 증가시켜, 기존 점수 15에서 115로 업데이트합니다.

5. 점수와 함께 데이터 조회 (ZRANGE withscores)

List<Tuple> tuples = jedis.zrangeWithScores("game2:scores", 0, Long.MAX_VALUE);
tuples.forEach(i -> System.out.println("%s %f".formatted(i.getElement(), i.getScore())));
  • 설명: zrangeWithScores 명령어는 Sorted Set에서 값뿐만 아니라 해당 값의 점수도 함께 반환합니다. Tuple 객체의 getElement()는 값을, getScore()는 해당 값의 점수를 가져옵니다.
  • 목적: 점수와 함께 사용자 정보를 조회하여, 모든 사용자의 점수와 이름을 출력합니다.

코드 흐름 요약

1. ZADD: Sorted Set에 사용자와 점수 데이터를 추가합니다.
2. ZRANGE: Sorted Set에서 사용자 데이터를 조회합니다. 점수 기준으로 오름차순으로 정렬된 데이터를 반환합니다.
3. ZCARD: Sorted Set에 저장된 값(사용자)의 수를 조회합니다.
4. ZINCRBY: 특정 사용자의 점수를 지정된 값만큼 증가시킵니다.
5. ZRANGE withscores: 점수와 함께 정렬된 데이터를 조회합니다.

이 코드를 통해 게임이나 리더보드와 같은 상황에서 사용자 점수를 관리하고, 순위를 계산하는 데 사용할 수 있는 Redis의 Sorted Set 자료구조를 쉽게 다룰 수 있습니다.

저작자표시 (새창열림)

'DB > Redis' 카테고리의 다른 글

Redis Bitmap 실습: 비트 단위 데이터 처리  (0) 2024.09.11
Redis Geospatial 실습: 좌표 기반 데이터 처리  (0) 2024.09.11
Redis Hash 실습: 키-필드-값 데이터 구조 관리하기  (2) 2024.09.11
Redis Set 실습: 집합 연산과 활용법  (0) 2024.09.11
Redis 문자열 실습: 기본 데이터 타입 다루기  (1) 2024.09.11
'DB/Redis' 카테고리의 다른 글
  • Redis Bitmap 실습: 비트 단위 데이터 처리
  • Redis Geospatial 실습: 좌표 기반 데이터 처리
  • Redis Hash 실습: 키-필드-값 데이터 구조 관리하기
  • Redis Set 실습: 집합 연산과 활용법
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    WebFlux
    자바
    Python
    docker
    프로그래머스
    ecs
    celery
    Docker-compose
    SAA
    spring
    시험
    OOP
    FastAPI
    EC2
    Spring WebFlux
    Redis
    java
    RDS
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    백준
    Spring Boot
    파이썬
    DP
    완전탐색
    reactor
    그리디
    mybatis
    AWS
    취업리부트
    항해99
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
Redis Sorted Set 실습: 정렬된 데이터를 효율적으로 처리하기
상단으로

티스토리툴바