RedisConfig
@Configuration
public class RedisConfig {
@Value("${spring.data.redis.host}")
private String host;
@Value("${spring.data.redis.port}")
private int port;
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
//Lettuce라는 라이브러리를 활용해 Redis 연결을 관리하는 객체를 셍성
//Redis 서버에 대핸 정보(host, port)를 설정
return new LettuceConnectionFactory(new RedisStandaloneConfiguration(host, port));
}
}
RedisCacheConfig
@Configuration
@EnableCaching //스프링 부투 캐싱 활성화
public class RedisCacheConfig {
@Bean
public CacheManager cacheManager(
RedisConnectionFactory redisConnectionFactory
) {
RedisCacheConfiguration redisCacheConfiguration
= RedisCacheConfiguration
//Redis에 key를 저장할때 String으로 직렬화(변환) 해서 저장
.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(
new StringRedisSerializer()))
//Redis에 Value를 저장할때 Json으로 직렬화 해서 저장
//GenericJackson~~ -> class 이름 까지 나온다.
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(
new Jackson2JsonRedisSerializer<Object>(Object.class)
))
//데이터 만료기간 (TTL)
.entryTtl(Duration.ofMinutes(1L));
return RedisCacheManager
.RedisCacheManagerBuilder
.fromConnectionFactory(redisConnectionFactory)
.cacheDefaults(redisCacheConfiguration)
.build();
}
}
BoardService
@Service
public class BoardService {
private final BoardRepository boardRepository;
private Pageable pageable;
public BoardService(BoardRepository boardRepository) {
this.boardRepository = boardRepository;
}
//Cacheable 에노테이션을 붙이면, CacheAside 전략으로 캐싱이 적용
//해당 메서드로 요청이 들어오면 레디스 확인 후 db 있다면 redis data 바로 응답. = cacheHit
//만약 없다면 메서드 내부 로직을 실행 후 return 값으로 응답
@Cacheable(cacheNames = "getBoards", key = "'boards:page:' + #page + ':size:' + #size", cacheManager = "cacheManager")
//boards:page:1:size:10 - 게시글들에 1번 page에 size가 10인 data
public List<Board> getBoardList(int page, int size) {
Pageable pageable = PageRequest.of(page -1 , size);
Page<Board> boards = boardRepository.findAllByOrderByCreatedAtDesc(pageable);
return boards.getContent();
}
/*
성능 개선을 할때는 실제로 얼마나 느린지 빨라졌는지 측정해야 한다.
Cacheable X -> Waiting (TTFB) 235.27 ms
Cacheable 0 -> Waiting (TTFB) 8ms
*/
}
성능 차이
Cacheable X -> Waiting (TTFB) 235.27 ms
Cacheable 0 -> Waiting (TTFB) 8ms
처음에 id 값이 안떠서 확인해보니 getId 안해줌..