본문 바로가기
Java, Kotlin, Spring/Spring, Spring Boot

Spring Data - Redis

by Wordbe 2021. 1. 21.
728x90

Springboot - Spring Data - Redis

 

RDB 가 아닌 NoSQL 과 스프링 데이터를 연동해보자.

 

1) Redis 를 연동하기 위해 의존성을 추가해준다.

pom.xml

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

 

2) 로컬에 Redis 서버를 띄우기 위해 도커를 사용한다.

$ docker run -p 6379:6379 --name springboot-redis -d redis

Redis 는 6379가 기본포트이고, 로컬의 6379 포트와 도커 안 6379 포트를 연결해준다.

 

3) 도커 컨테이너를 실행시킨다.

$ docker exec -it springboot-redis redis-cli

 

4) 자바에서 템플릿으로는 StringRedisTemplate 또는 RedisTemplate 을 사용한다.

ApplicationRunner 를 만들어서 테스트해보자.

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    StringRedisTemplate redisTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        ValueOperations<String, String> values = redisTemplate.opsForValue();
        values.set("name", "apple");
        values.set("category", "fruit");
        values.set("color", "red");
    }
}

애플리케이션을 실행시키고 레디스 CLI에 들어가면 key, value 데이터를 확인할 수 있다.

127.0.0.1:6379> keys *
1) "color"
2) "name"
3) "category"

127.0.0.1:6379> get color
"red"

127.0.0.1:6379> get name
"apple"

127.0.0.1:6379> get category
"fruit"

 

5) ORM (Hash 와 Repository)을 만들어보자.

@Getter @Setter
@RedisHash("foods")
public class Food {

    @Id
    String id;

    String name;

    String color;
}

관계형데이터베이스 @Entity 와는 다르게 NoSQL 에서는 @RedisHash 로 해쉬키를 설정해주어야 한다.

 

public interface FoodRepository extends CrudRepository<Food, String> {
}

CrudRepository 를 상속받아 인터페이스를 정의하면 된다.

 

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    FoodRepository foodRepository;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        Food food = new Food();
        food.setName("apple");
        food.setColor("red");

        foodRepository.save(food);

        Optional<Food> byId = foodRepository.findById(food.getId());
        System.out.println(byId.get().getName());
        System.out.println(byId.get().getColor());
    }
}

food 객체를 만들어서 레포지토리에 저장한다.

Id 로 food 객체를 찾아서 조회해볼 수 있다.

Redis CLI 에서 결과를 확인해보자

# 모든 키 확인
127.0.0.1:6379> keys *
1) "category"
2) "foods"
3) "name"
4) "color"
5) "foods:df52e1b7-5733-4ace-a231-1ea8c5504c5e"

# food 해쉬를 찾지만 에러
127.0.0.1:6379> get foods
(error) WRONGTYPE Operation against a key holding the wrong kind of value

# hget 으로 조회
127.0.0.1:6379> hget foods:df52e1b7-5733-4ace-a231-1ea8c5504c5e name
"apple"
127.0.0.1:6379> hget foods:df52e1b7-5733-4ace-a231-1ea8c5504c5e color
"red"

# hgetall 로 한꺼번에 모두 조회
127.0.0.1:6379> hgetall foods:df52e1b7-5733-4ace-a231-1ea8c5504c5e
1) "_class"
2) "co.wordbe.springgothree.food.Food"
3) "id"
4) "df52e1b7-5733-4ace-a231-1ea8c5504c5e"
5) "name"
6) "apple"
7) "color"
8) "red"

 

 

 

 

 

728x90

'Java, Kotlin, Spring > Spring, Spring Boot' 카테고리의 다른 글

Springboot - Security  (0) 2021.01.21
Spring Data - MongoDB  (0) 2021.01.21
Spring Data - Neo4j 사용  (0) 2021.01.20
Spinrg data 초기화, migration  (0) 2021.01.20
Springboot - Spring Data JPA  (0) 2021.01.20

댓글