Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions src/main/java/com/fund/stockProject/global/config/RedisConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fund.stockProject.stock.dto.response.StockInfoResponse;

@Configuration
@EnableCaching
Expand Down Expand Up @@ -52,25 +53,35 @@ public RedisCacheConfiguration defaultCacheConfiguration(ObjectMapper redisCache
@Bean
public CacheManager cacheManager(
RedisConnectionFactory connectionFactory,
RedisCacheConfiguration defaultCacheConfiguration) {
RedisCacheConfiguration defaultCacheConfiguration,
ObjectMapper redisCacheObjectMapper) {

Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();

@SuppressWarnings("unchecked")
RedisSerializer<Object> stockInfoSerializer =
(RedisSerializer<Object>) new Jackson2JsonRedisSerializer<>(StockInfoResponse.class);
((Jackson2JsonRedisSerializer<?>) stockInfoSerializer).setObjectMapper(redisCacheObjectMapper);
RedisSerializationContext.SerializationPair<Object> stockInfoSerializationPair =
RedisSerializationContext.SerializationPair.fromSerializer(stockInfoSerializer);

// 숏뷰 추천: 5분 캐시 (사용자별 추천 결과)
cacheConfigurations.put("shortview",
defaultCacheConfiguration.entryTtl(Duration.ofMinutes(5)));

// 실시간 가격: 30초 캐시 (변동성 높음)
cacheConfigurations.put("stockPrice",
defaultCacheConfiguration.entryTtl(Duration.ofSeconds(30)));
defaultCacheConfiguration.entryTtl(Duration.ofSeconds(30))
.serializeValuesWith(stockInfoSerializationPair));

// 주식 정보: 1시간 캐시 (기본 정보, 변동 적음)
cacheConfigurations.put("stockInfo",
defaultCacheConfiguration.entryTtl(Duration.ofHours(1)));

// 검색 결과: 30분 캐시
cacheConfigurations.put("searchResult",
defaultCacheConfiguration.entryTtl(Duration.ofMinutes(30)));
defaultCacheConfiguration.entryTtl(Duration.ofMinutes(30))
.serializeValuesWith(stockInfoSerializationPair));

// 유효한 주식 목록: 1시간 캐시
cacheConfigurations.put("validStocks",
Expand Down