다음은 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 실습: 키-필드-값 데이터 구조 관리하기 (0) | 2024.09.11 |
Redis Set 실습: 집합 연산과 활용법 (0) | 2024.09.11 |
Redis 문자열 실습: 기본 데이터 타입 다루기 (1) | 2024.09.11 |