1. 애플리케이션 자바 파일에 @EnableCaching 어노테이션을 통해 캐시를 사용할 수 있도록 해주세요.
@SpringBootApplication
@EnableCaching
public class redisTestApplication {
public static void main(String[] args) {
SpringApplication.run(redisTestApplication.class, args);
}
}
2. 캐시를 위한 config 파일을 생성해서 관련 코드를 작성해주세요.
@Configuration //config bean으로 활용하기 위함
@RequiredArgsConstructor
public class CacheConfig {
private String host = "localhost";
private int port = 6379;
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory){
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
//key와 value 직렬화하는 과정 : 데이터 -> 바이트로 변환
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.RedisCacheManagerBuilder
.fromConnectionFactory(redisConnectionFactory)
.cacheDefaults(configuration)
.build();
}
@Bean
public RedisConnectionFactory redisConnectionFactory(){
// 레디스 서버를 싱글인스턴스 서버로 할 것이기 때문에,
// RedisStandaloneConfiguration를 사용
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
configuration.setHostName(host);
configuration.setPort(port);
return new LettuceConnectionFactory(configuration);
}
}
3. 캐시를 저장할 서비스 클래스 아래의 메소드에 @Cacheable 어노테이션을 지정해주세요.
@Cacheable("bestProduct")
public Product getBestProductByBrandName(String brandName){
}
캐시를 설정할 때 고려해야 하는 것이 있다. -> 자주 변하지 않는 데이터인가?
==> 자주 변하고 삭제되는 데이터라면 캐시로 활용하기엔 부적합하다.
위와 같은 코드는 bestProduct라는 캐시의 이름의 아래 메소드의 인자값으로 넘어온
brandName을 key의 값으로 캐시가 생성됩니다.
<캐시가 적용되고 흐름>
1. 캐시에 저장된 값이 있는지 확인한다.
2-1. 없다면, 브랜드 이름으로 들어온 인자값이 best 상품을 찾아오는 getBestProductByBrandName 메소드가 실행되어 캐시가 저장된다.
2-1. 있다면, 캐시에서 best 상품의 값을 바로 가져온다.
캐시를 삭제하는 @CacheEvict
1. 모든 캐시를 삭제
@CacheEvict(value = "bestProduct", allEntries = true)
2. 입력한 캐시의 이름을 가진 캐시를 삭제
@CacheEvict(value = "bestProduct")
3. 인자값으로 넘어온 값의 해당되는 키의 캐시를 삭제
@CacheEvict(value = "bestProduct", key = "#brandName")
private String getBestProductByBrandName(String brandName)'spring' 카테고리의 다른 글
| [intellJ 오류] > Process 'command 'C:\Program Files\Java\jdk-17\bin\java.exe'' finished with non-zero exit value 1 (0) | 2023.09.01 |
|---|---|
| [spring boot]멀티 모듈 프로젝트 생성하는 방법 (0) | 2023.08.28 |
| [spring]spring security를 활용한 간단한 회원가입_1(feat.userDetails) (0) | 2023.08.17 |
| [spring]log에 대한 모든 것_로그 설정 파일(.xml) (0) | 2023.08.17 |
| [redis] 레디스 설치 및 스프링 부트 환경 설정1_windows (0) | 2023.08.14 |