ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 레디스 사용법
    DataBase/Redis 2021. 6. 6. 18:23
    반응형

    레디스란?

    2021.05.19 - [DataBase/Redis] - Redis란?

     

    회사에서 레디스를 사용하게 되었다. 그래서 기본적인 사용법을 알고자 코드를 작성해 보았다.

    전체적인 코드는 git에 올려다 두었다.

     

    스프링에서 레디스를 사용하는 방법은 크게 2가지가 존한다.

    1. StringRedisTemplate of RedisTemplate
    2. CrudRepository

     

     

    사용법

    1. docker 실행

    docker run -p 6379:6379 --name redis_boot -d redis

    2. 레디스 접속

    docker exec -i -t redis_boot redis-cli

    3. 코드 작성

    3-1. StringRedisTemplate

    springboot 2.0이상부터는 auto-configuration으로 위의 빈(redisConnectionFactory, RedisTemplate, StringTemplate)들이 자동으로 생성되기 때문에 굳이 Configuration을 만들지 않아도 즉시 사용가능하다.
    출처 기본기를 쌓는 정아마추어 코딩블로그

     

    @Component
    @RequiredArgsConstructor
    public class RedisRunner implements ApplicationRunner {
    
        private final StringRedisTemplate redisTemplate;
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            ValueOperations<String, String> value = redisTemplate.opsForValue();
            value.set("동물", "dog");
            value.set("집", "anyang");
            value.set("hello", "world");
            value.set("이름", "jinSeok");
        }
    }

    위의 코드를 작성하고 실행하게 한 후 아래의 주소의 레디스의 접근하여 키를 조회하게 되면 아래와같이 나오게 된다. 한글로 작성하게 된다면 데이터가 아래와 같이 깨지게 되는데 이유는 자바 직렬화 문제이다. 이유는 여기를 확인해보자

     

    3-2 CrudRepository

    아래의 코드를 확인해본다면 . @RedisHash가 존재 하는데 이것은 레디스의 Hash값을 이용하여 데이터의 중복을 줄이기 위한 행위이다.

    @RedisHash("account")
    @Data
    @Builder
    public class Account {
        private String id;
        private String userName;
        private String email;
    }

     

    public interface AccountRepository extends CrudRepository<Account, String> {
    }

     

    @Component
    @RequiredArgsConstructor
    public class RedisRunner implements ApplicationRunner {
    
        private final AccountRepository accountRepository;
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            Account account = Account.builder()
                    .email("rlawls1991@naver.com")
                    .userName("rlawls1991")
                    .build();
            accountRepository.save(account);
    
            Optional<Account> findId = accountRepository.findById(account.getId());
            System.out.println(findId.get().getEmail());
            System.out.println(findId.get().getId());
            System.out.println(findId.get().getUserName());
    
    
            List<Account> list = (List<Account>) accountRepository.findAll();
            for(Account temp : list){
                System.out.println("-----------------------");
                System.out.println(temp.getId());
                System.out.println(temp.getUserName());
                System.out.println(temp.getEmail());
                System.out.println("-----------------------");
            }
    
        }
    }

    위의 코드를 실행히키고 난 뒤 레디스의 키정보를 보게 된다며 아래와 같이 나오게 된다.

    RedisTemplate처럼 get key로 데이터를 가져오는 것이아니라 아래와 같이 Hash값을 이용해서 가져와야 한다. 

    hget 해쉬entity 필드이름
    hgetall 해쉬entity

    하지만 이렇게 가져와도 데이터가 이상하게 나오는 것을 알 수가 있는데 이것은 직렬화문제이다. 알기위해서는 여기를 보면 된다.

     

     

    Redis Client 사용

    https://jojoldu.tistory.com/418

     

     

     

     

     

     

    참고

    https://jojoldu.tistory.com/418

    https://velog.io/@max9106/Spring-Boot-Redis

    반응형

    'DataBase > Redis' 카테고리의 다른 글

    Redis란?  (0) 2021.05.19
Designed by Tistory.