다음은 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 |