2024. 4. 15. 16:31ㆍ기술 창고/DataBase
Redis의 Sorted Set은 말 그대로 정렬된 Set 데이터를 말합니다.
기존의 일반 Set은 정렬되지 않는 특징을 갖고 있지만 Sorted Set은 정렬된 데이터를 말합니다.
주요 명령어
- ZADD
- ZREM
- ZRANGE
- ZCARD
- ZRANK
- ZREVRANK
- ZINCRBY
Command 실습
ZADD
zadd는 Sorted Set에 데이터를 넣어줄 때 사용되는 명령어입니다.
다중으로 데이터를 넣어줄 수 있습니다.
Set과 마찬가지로 중복을 허용하지 않기 때문에 새로운 데이터로 업데이트 됩니다.
- 형식 : zadd {Sorted Set 명} {정렬될 필드 값} {데이터 값} {정렬될 필드 값2} {데이터 값2} ...
ZRANGE
zrange는 Sorted Set의 특정 구간 까지의 데이터들을 정렬하여 출력하는 명령어입니다.
- 오름차순 형식 : zrange {Sorted Set 명} 0 +inf byscore limit {시작 인덱스} {끝 인덱스}
- 내림차순 형식 : zrange {Sorted Set 명} +inf 0 byscore rev limit {시작 인덱스} {끝 인덱스}
내림차순 정렬을 수행할 때는 반드시 rev 옵션이 붙어있어야 하며, 마지막에 withscores 옵션을 붙이게 되면 정렬된 필드와 데이터값을 같이 보여주게 됩니다.
그리고 byscores 이외에 bylex 옵션도 존재하는데, 이는 String 타입의 문자 데이터에 한해 정렬을 수행하게 해주는 옵션입니다.
ZREM
zrem은 Sorted Set의 특정 데이터를 삭제하는 명령어입니다.
- 형식 : zrem {Sorted Set 명} {데이터 값}
ZCARD
zcard는 Sorted Set에 존재하는 데이터 수를 출력하는 명령어입니다.
- 형식 : zcard {Sorted Set 명}
ZRANK
zrank는 현재 Sorted Set 에 존재하는 특정 데이터가 몇 순위(인덱스) 에 위치하고 있는지 나타내주는 명령어입니다.
- 형식 : zrank {Sorted Set 명} {데이터 값}
현재 user1이 가장 첫 번째에 위치하고 있으므로 0이 조회되고, user3는 두 번째에 위치하고 있으므로 1이 조회됩니다.
ZREVRANK
zrevrank는 현재 위치하고 있는 데이터들을 역순으로 조회하여 순위를 나타내주는 명령어입니다.
- 형식 : zrevrank {Sorted Set 명} {데이터 값}
원래 user1이 가장 첫 번째에 위치하고 있으나 reverse 됨으로써 user3가 첫 순위로 올라가 0이 조회되고, user1이 두 번째 순위로 내려가서 1이 조회됩니다.
ZINCRBY
zincrby는 Sorted Set에 존재하는 특정 데이터의 정렬 기준 데이터를 원자적으로 증가시켜주는 명령어입니다.
만약 특정 데이터가 존재하지 않으면 생성 후 데이터를 넣어줍니다.
- 형식 : zincrby {Sorted Set 명} {증가 수량} {데이터 값}
Spring Boot 사전 연동 필요
https://jindevelopetravel0919.tistory.com/395
[Redis] Spring Boot 와 Redis 연동 설정 - (Jedis)
Spring Boot 환경에서 Redis 를 사용하기 위한 방법 중 하나인 Jedis 설정 과정과 연동 과정에 대해 정리해보겠습니다. 또한 제가 진행하고자 하는 Spring Boot는 gradle 환경입니다. (1) Dependency 추가 Build.gra
jindevelopetravel0919.tistory.com
Spring Boot 활용 실습
// Redis - Sorted Set
public void jedisOfSortedSet() {
try (JedisPool pool = jedisPoolSetting()) {
try (Jedis jedis = pool.getResource()) {
// [ ZADD ]
HashMap<String, Double> scores = new HashMap<>();
scores.put("user1", 100d);
scores.put("user2", 30d);
scores.put("user3", 50d);
scores.put("user4", 80d);
scores.put("user5", 15d);
// zadd를 통한 정렬된 set에 데이터 저장 (HashMap을 통해 다수의 데이터를 한번에 저장 가능)
jedis.zadd("game2:scores", scores);
// [ ZRANGE ]
// zrange를 통한 특정 set의 정렬된 값들 조회
List<String> zrange = jedis.zrange("game2:scores", 0, Long.MAX_VALUE);
zrange.forEach(System.out::println);
// zrangeWithScores를 통한 특정 Set의 필드값과 스코어(값)들을 함께 조회
List<Tuple> tuples = jedis.zrangeWithScores("game2:scores", 0, Long.MAX_VALUE);
tuples.forEach(tuple -> System.out.println(tuple.getElement() + " : " + tuple.getScore()));
// [ ZCARD ]
// zcard를 통한 특정 set의 필드 데이터 수
System.out.println(jedis.zcard("game2:scores"));
// [ ZINCRBY ]
// zincrby를 통한 특정 Set의 특정 필드의 데이터를 증량
jedis.zincrby("game2:scores", 100d, "user5");
List<Tuple> tuples2 = jedis.zrangeWithScores("game2:scores", 0, Long.MAX_VALUE);
tuples2.forEach(tuple -> System.out.println(tuple.getElement() + " : " + tuple.getScore()));
}
}
}
'기술 창고 > DataBase' 카테고리의 다른 글
[Redis] CentOS 환경 Redis 설치 (0) | 2024.04.16 |
---|---|
[Redis] Bitmap 데이터 운영 - (Jedis) (0) | 2024.04.15 |
[Redis] Hash 데이터 운영 - (Jedis) (0) | 2024.04.15 |
[Redis] Set 데이터 운영 - (Jedis) (0) | 2024.04.15 |
[Redis] List 데이터 운영 - (Jedis) (0) | 2024.04.15 |