반응형
Redis는 Sorrted Set 데이터구조를 Zset으로 부른다.
이 Zset은 Redis에서 권장하는 데이터 구조이다.
Zset과 Set의 차이점
- Zset은 Set의 순서에 상관없이 저장되는 문제를 해결하기 위해 저장 순서를 지정할 수 있는 데이터 구조이다.
저장
@GetMapping(value = "redis/saveRedisZSetJSON")
public String saveREdisZSetJSON() throws Exception {
// 수집 결과 출력
String msg;
int res = iMyRedisService.saveRedisZSetJSON();
if (res == 1) {
msg = "success";
} else {
msg = "fail";
}
return msg;
}
- MyRedisController.java
int saveRedisZSetJSON() throws Exception;
- IMyRedisService.java
@Override
public int saveRedisZSetJSON() throws Exception {
String redisKey = "myREdis_Zset_JSON";
List<RedisDto> pList = new LinkedList<>();
for (int i = 0; i < 10; i++) {
RedisDto redisDto = new RedisDto();
redisDto.setTest_text(i + " 번째 데이터입니다.");
redisDto.setName("오주현[" + i + "]");
redisDto.setAddr("경기");
redisDto.setEmail("qwe@naver.com");
pList.add(redisDto);
redisDto = null;
}
log.debug("### pList : {}", pList);
int res = iMyRedisMapper.saveRedisZSetJSON(redisKey, pList);
return res;
}
- MyRedisService.java
int saveRedisZSetJSON(String redisKey, List<RedisDto> pList) throws Exception;
- IMyRedisMapper.java
@Override
public int saveRedisZSetJSON(String redisKey, List<RedisDto> pList) throws Exception {
int res = 0;
// redisD의 키의 데이터 타입을 String으로 정의(항상 String으로 설정함)
redisDB.setKeySerializer(new StringRedisSerializer());
//RedisDTO에 저장된 데이터를 자동으로 JSON으로 변경하기
redisDB.setValueSerializer(new Jackson2JsonRedisSerializer<>(RedisDto.class));
int idx = 0;
for (RedisDto dto : pList) {
redisDB.opsForZSet().add(redisKey, dto, ++idx); // 저장할 떄 Score 값을 지정해야 한다.
}
// 저장되는 데이터의 유효기간(TTL)은 5시간으로 정의
redisDB.expire(redisKey, 5, TimeUnit.HOURS);
res = 1;
return res;
}
- MyRedisMapper.java
가져오기
@GetMapping(value = "redis/getREdisZSetJSON")
public Set<RedisDto> getRedisZSetJSON() throws Exception {
Set<RedisDto> redisDtoSet = iMyRedisService.getRedisZSetJSON();
return redisDtoSet;
}
- MyRedisController.java
Set<RedisDto> getRedisZSetJSON() throws Exception;
- IMyRedisService.java
@Override
public Set<RedisDto> getRedisZSetJSON() throws Exception {
String redisKey = "myRedis_Zset_JSON";
Set<RedisDto> redisDtoSet = iMyRedisMapper.getRedisZSetJSON(redisKey);
if (redisDtoSet == null) {
redisDtoSet = new HashSet<>();
}
return redisDtoSet;
}
- MyRedisService.java
Set<RedisDto> getRedisZSetJSON(String redisKey) throws Exception;
- IMyRedisMapper.java
@Override
public Set<RedisDto> getRedisZSetJSON(String redisKey) throws Exception {
// 결과 값 전달할 객체
Set<RedisDto> redisDtoSet = null;
// redisDB의 키의 데이터 타입을 String으로 정의(항상 String으로 정의함)
redisDB.setKeySerializer(new StringRedisSerializer());
// ReidsDTO에 저장된 데이터를 자동으로 JSON으로 변경하기
redisDB.setValueSerializer(new Jackson2JsonRedisSerializer<>(RedisDto.class));
if (redisDB.hasKey(redisKey)) {
// 저장된 전체 레코드 수
Long cnt = redisDB.opsForZSet().size(redisKey);
redisDtoSet = (Set) redisDB.opsForZSet().range(redisKey, 0, cnt);
}
return redisDtoSet;
}
- MyRedisMapper.java
반응형
'Data Base > Redis' 카테고리의 다른 글
[Redis] : Redis 데이터 수정을 위한 데이터 삭제 (0) | 2022.05.17 |
---|
댓글