본문 바로가기
Data Base/Redis

[Redis] : Zset 타입에 JSON 구조 저장 및 값 저장한 값 가져오기

by 오주현 2022. 5. 17.
반응형

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

댓글