diff --git a/backend/streetdrop-api/src/main/java/com/depromeet/external/redis/RedisConfig.java b/backend/streetdrop-api/src/main/java/com/depromeet/external/redis/RedisConfig.java new file mode 100644 index 00000000..1640f28e --- /dev/null +++ b/backend/streetdrop-api/src/main/java/com/depromeet/external/redis/RedisConfig.java @@ -0,0 +1,65 @@ +package com.depromeet.external.redis; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.time.Duration; + +@Configuration +//@EnableCaching +public class RedisConfig { + + @Value("${spring.data.redis.host}") + private String host; + + @Value("${spring.data.redis.port}") + private int port; + + @Value("${spring.data.redis.timeout}") + private int timeout; + + @Bean + public RedisConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(host, port); + } + + @Bean + public RedisTemplate redisTemplate() { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory()); + redisTemplate.afterPropertiesSet();; + return redisTemplate; + } + + @Bean(name = "redisCacheManager") + public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) { + RedisCacheConfiguration configuration = RedisCacheConfiguration + .defaultCacheConfig() + .disableCachingNullValues() + .entryTtl(Duration.ofMinutes(timeout)) + .serializeKeysWith( + RedisSerializationContext + .SerializationPair + .fromSerializer(new StringRedisSerializer())) + .serializeValuesWith( + RedisSerializationContext + .SerializationPair + .fromSerializer(new GenericJackson2JsonRedisSerializer())); + + return RedisCacheManager.RedisCacheManagerBuilder + .fromConnectionFactory(connectionFactory) + .cacheDefaults(configuration) + .build(); + } + +} diff --git a/backend/streetdrop-api/src/main/resources/application-dev.yml b/backend/streetdrop-api/src/main/resources/application-dev.yml index dfc05db9..7b5cf470 100644 --- a/backend/streetdrop-api/src/main/resources/application-dev.yml +++ b/backend/streetdrop-api/src/main/resources/application-dev.yml @@ -10,6 +10,15 @@ spring: jpa: hibernate: ddl-auto: update + cache: + type: redis + redis: + cache-null-values: true + data: + redis: + host: ${REDIS_HOST} + port: ${REDIS_PORT} + timeout: 30 swagger: server-url: ${SWAGGER_SERVER_URL} slack: diff --git a/backend/streetdrop-api/src/main/resources/application-prod.yml b/backend/streetdrop-api/src/main/resources/application-prod.yml index dfc05db9..7b5cf470 100644 --- a/backend/streetdrop-api/src/main/resources/application-prod.yml +++ b/backend/streetdrop-api/src/main/resources/application-prod.yml @@ -10,6 +10,15 @@ spring: jpa: hibernate: ddl-auto: update + cache: + type: redis + redis: + cache-null-values: true + data: + redis: + host: ${REDIS_HOST} + port: ${REDIS_PORT} + timeout: 30 swagger: server-url: ${SWAGGER_SERVER_URL} slack: