카테고리 없음

redis caching

jw-backend 2024. 9. 11. 23:09
반응형

 

 

@Configuration // 이 클래스가 Spring의 설정 클래스임을 나타냄
@EnableCaching // 캐싱 기능을 활성화
public class CacheConfig {

    @Bean // Spring 컨테이너에 등록될 Bean을 정의
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        
        // Jackson2JsonRedisSerializer 사용
        // Redis에 저장될 객체를 JSON 형식으로 직렬화하기 위한 직렬화기 생성
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);

        // RedisCacheConfiguration 설정
        // 기본 캐시 설정을 가져와 TTL 및 직렬화기 설정
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(10)) // TTL 10분 설정 (10분 후 캐시 만료)
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer)) // 값 직렬화기 설정
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())); // 키 직렬화기 설정

        // RedisCacheManager를 생성하여 반환
        return RedisCacheManager.builder(redisConnectionFactory) // RedisConnectionFactory를 사용하여 매니저 빌드
                .cacheDefaults(config) // 기본 캐시 설정 적용
                .build(); // 매니저 빌드 완료
    }
}

 

TeamserviceImpl

    //팀 내 명함 조회
    @Override
    @Cacheable(value = "teamAlbumCache", key = "#teamAlbumId")
    public List<PrivateAlbumResponseDto> getTeamAlbumList(Long teamAlbumId, int page) {
        log.info("Fetching data from the database for teamAlbumId: {}, page: {}", teamAlbumId, page);

        int size = 12;
        log.info("teamalbumpageeee   " );

        Pageable pageable = PageRequest.of(page, size, Sort.by("businesscard.cardId").descending());
        Page<TeamAlbumDetail> teamAlbumPage = teamAlbumDetailRepository.findByTeamAlbum_TeamAlbumId(teamAlbumId, pageable);
        log.info("teamalbumpageeee   " + teamAlbumPage);
        List<PrivateAlbumResponseDto> dtos = teamAlbumPage.stream()
                .map(bc -> bc.getBusinesscard())
                .map(teamsMapper::toDto).toList();
        return dtos;

    }

 

TeamsController
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "팀 내 명함 조회 redis caching"),
            @ApiResponse(responseCode = "404", description = "팀 내 명함 없음")
    })
    @GetMapping("/teams/list/{team_album_id}/{page}")
    public ResponseEntity<?> getTeamAlbumList(
            @PathVariable("team_album_id")Long teamAlbumId,
            @PathVariable("page")int page){
        log.info("cacheeeeee");
        List<PrivateAlbumResponseDto> dtos = teamsService.getTeamAlbumList(teamAlbumId, page);
        return ResponseEntity.ok().body(MessageUtils.success(dtos));
    }




 redis cahing 을 사용하여  디비에 접근하지 않고 빠르게 팀 명함 조회 가능하도록 했습니다

 

 

ttl 과 cacheEvict 어노테이션을 활용해 캐시 내용 업데이트를 하게끔 했습니다.