Redis

Redis 와 Spring boot 간단하게 연동 및 Postman 확인

MIN우 2022. 12. 23. 16:45
728x90

 

1. Redis 동작과정

 

더보기

 

cashe 구조 #1 Look aside cache (일반적으로 제일 많으쓰는 패턴)

1.web server는 데이터가 존재하는지 cache를 먼저확인

2.cache에 데이터가 있으면 cache 에서 가져온다

3.cache에 데이터가 없다면 DB에서 읽어온다.

4. DB에서 읽어온 데이터를 Cache에 다시 저장한다.

 

 

2. Redis와 Spring boot 연동

 

1. redis 설치 및 설정

2. 의존성 설정

3. public main 에 EnableCaching 설정

 

4.RedisConfig , Entity 및 RedisRepository 생성

 

5.Controller Redis에 set,get

 

3-1 redis 설치 및 설정

 

https://github.com/microsoftarchive/redis

 

더보기

자신의 버젼에 맞는 Redis를 설치해주세요.

더보기

redis.windows.conf 에서 클릭

 

더보기

Ctrl+F를 클릭하여 requirepass를찾고 해당부분을 requirepass redis6379로 변경시킨다.

 

더보기

redis-server.exe 실행

 

더보기

redis 실행완료

3-2 의존성 설정

 

application.properties에 다음 내용을 설정해주세요.

spring.redis.host=localhost
spring.redis.port=6379

spring.redis.host 옵션은 redis서버의 url 또는 ip를 설정해주시면 되고 spring.redis.port는 해당 서버의 포트를 적어주시면 됩니다.  여기서 설정한 내용은 캐시 설정을 할 때 직접 불러와서 세팅을 진행하게 됩니다.

 

3-3 public main 에 EnableCaching 설정

 

@SpringBootApplication
@EnableCaching  
public class RedisCacheApplication {

	public static void main(String[] args) {
		SpringApplication.run(RedisCacheApplication.class, args);
	}

}

메인 어플리케이션 클래스에 @EnableCaching 을 선언해주세요.

해당 어노테이션을 선언하면 스프링 부트에서는 @Cacheable과 같은 캐싱 어노테이션의 사용을 인식하게 됩니다.

 

3-4 Config ,Entity ,RedisRepository 생성

 

RedisConfig.class

@Configuration
public class RedisConfig {
  
  @Value("${spring.redis.port}")
  public int port;
  
  @Value("${spring.redis.host}")
  public String host;
  
  @Autowired
  public ObjectMapper objectMapper;
  
  @Bean
  public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    redisTemplate.setConnectionFactory(connectionFactory);
    return redisTemplate;
  }

  @Bean
  public RedisConnectionFactory redisConnectionFactory() {
    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
    redisStandaloneConfiguration.setHostName(host);
    redisStandaloneConfiguration.setPort(port);
    LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
    return connectionFactory;
  }
}

 

Person.class

 

package com.example.redis_test_project.entity;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;

import java.util.List;


@RedisHash("person")
@Data
public class Person {

    @Id
    String id; // person:<id> person:aaa person:kim
    String name;
    int age;

    List<String> tag;
}

 

RedisRepository.class

package com.example.redis_test_project.repository;

import com.example.redis_test_project.entity.Person;
import org.springframework.data.repository.CrudRepository;


public interface RedisRepository extends CrudRepository<Person, String> {


}

3-5 Controller Redis에 set,get

 

package com.example.redis_test_project.Controller;

import com.example.redis_test_project.entity.Person;
import com.example.redis_test_project.repository.RedisRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class TestController {


    @Autowired
    RedisRepository redisRepository;

    @GetMapping
    public String get(){

        return redisRepository.findAll().toString();
    }

    @PostMapping
    public String set(@RequestBody Person person){
        return redisRepository.save(person).toString();
    }
}

 

4. Postman으로 json 객체를 set

 

5.Postman으로 findAll  및 Redis 캐시확인

 

 

더보기

redis-cli 실행후 Keys * 하게되면 저장했던 person 객체의 키값들이 뜨게된다.

728x90