[Caffine] 카페인 캐시 데이터 가져오기

누구세요·2024년 11월 27일

package com.crop.goodcrop.domain.trend.service;

import com.crop.goodcrop.config.CacheConfig;
import com.crop.goodcrop.domain.trend.dto.TopKeywordDto;
import com.crop.goodcrop.domain.trend.entity.SearchHistory;
import com.crop.goodcrop.domain.trend.entity.TopKeyword;
import com.crop.goodcrop.domain.trend.repository.SearchHistoryRepository;
import com.crop.goodcrop.domain.trend.repository.TopKeywordRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.Cache;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service
@RequiredArgsConstructor
public class TrendService {
private final SearchHistoryRepository searchHistoryRepository;
private final TopKeywordRepository topKeywordRepository;
private final CaffeineCacheManager cacheManager;

public List<TopKeywordDto> retrieveTopKeyword() {
    List<TopKeyword> topKeywords = topKeywordRepository.findAll();
    return topKeywords.stream().map(TopKeywordDto::from).toList();
}

public void modifyTopKeywordVersion1() {
    List<TopKeywordDto> searchHistories = searchHistoryRepository.findTopFiveOrderBySearchCount();
    topKeywordRepository.deleteAll();
    if(searchHistories == null || searchHistories.isEmpty())
        return;

    List<TopKeyword> topKeywords = new ArrayList<>();
    for(TopKeywordDto topKeywordDto : searchHistories) {
        TopKeyword topKeyword = topKeywordDto.convertDtoToEntity();
        topKeywords.add(topKeyword);
    }
    topKeywordRepository.saveAll(topKeywords);
}

// 캐시에서 로그를 읽어서
// 여기는 .. 어노테이션으로해도 괜찮지 않을..까?
// 핫키워드 업데이트
public void modifyTopKeywordVersion2() {
    Cache cache = cacheManager.getCache(CacheConfig.SEARCH_HISTORY);
    if(cache instanceof CaffeineCache caffeineCache) {
        // caffeineCache.getAsyncCache()
        caffeineCache.getAsyncCache().asMap();
    }

}

}

0개의 댓글