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 객체의 키값들이 뜨게된다.
'Redis' 카테고리의 다른 글
동시성문제 -> Redis Redisson (0) | 2023.07.02 |
---|---|
CrudRepository 와 JPARepository의 차이 (0) | 2022.12.29 |
Redis 용어정리 (0) | 2022.12.29 |
Redis_Crud_Example (0) | 2022.12.26 |
[Redis] 사용하는이유 (0) | 2022.12.23 |