✅ 주의 해야할점
Reids
에 객체를 저장하거나 읽을려면 항상 직렬화와 역직렬화 과정이 필요Redis
가 이해할 수 있는 형태로 변환하기 위해서 @AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class Board implements Serializable{
private static final long serialVersionUID = 1L;
private int boardNo;
private String boardWriter;
private String boardTitle;
private String boardContent;
private Date boardDate;
private String boardCategory;
private String noticeYn;
private String boardOriginalFileName;
private String boardRenamedFileName;
private int rnum; // rownum 추가 필요
}
@EnableCaching
을 사용하는 @Configuration
파일 만들기@Cacheable, @CachePut, @CacheEvict
등)@Configuration
@EnableCaching
public class RedisConfig {
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
// 캐시의 기본 동작 방식을 설정하는 객체를 만들기
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
// 캐시에 저장할 값을 JSON 형태로 직렬화(변환)하도록 설정
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.entryTtl(Duration.ofMinutes(10)) // 캐시의 유효기간을 10분으로 지정
.disableCachingNullValues(); // // null 값(값이 없는 경우)은 캐시에 저장하지 않도록 설정
// 위에서 만든 설정(config)과 Redis 연결 정보를 사용해서 RedisCacheManager 객체를 생성해서 반환
return RedisCacheManager.builder(connectionFactory).cacheDefaults(config).build();
}
}
@Cacheable
활용해서 Redis
캐싱 적용 @Cacheable(value = "boardList",key = "'allBoards'") // api로 redis 전체 데이터 호출 테스트
public List<Board> getBoardList(){
System.out.println("db안거침");
return boardDao.getBoardList();
}
// api로 redis 검색 데이터 호출 테스트
@Cacheable(value = "boardList", key = "'category:' + #category")
public List<Board> getBoardListByCategory(String category) {
System.out.println("db안거침");
return boardDao.getBoardListByCategory(category);
}
✅ 성능 비교
도커로 Redis
접속 후 레디스 접속하기
docker exec -it [컨테이너명] redis-cli
docker exec -it e4d redis-cli