Skip to content

Commit

Permalink
๐Ÿ› [Fix] ConfigureRedisAction Bean ์ถ”๊ฐ€ (#324)
Browse files Browse the repository at this point in the history
  • Loading branch information
middlefitting authored Nov 23, 2023
1 parent 6651896 commit ea9b25c
Showing 1 changed file with 82 additions and 41 deletions.
123 changes: 82 additions & 41 deletions src/main/java/com/gg/server/global/config/RedisConfig.java
Original file line number Diff line number Diff line change
@@ -1,76 +1,117 @@
package com.gg.server.global.config;

import java.time.Duration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
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.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
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.StringRedisSerializer;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.session.data.redis.config.ConfigureRedisAction;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.time.Duration;

/**
* Redis ์„ค์ •
*/
@Configuration
@EnableCaching
@EnableRedisRepositories
@EnableTransactionManagement
public class RedisConfig {

@Value("${spring.redis.host}")
private String host;
/**
* Redis Host
*/
@Value("${spring.redis.host}")
private String host;

/**
* Redis Port
*/
@Value("${spring.redis.port}")
private int port;

/**
* Redis Connection Factory
* <p>
* redisConnectionFactory() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด RedisConnectionFactory ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด RedisTemplate ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ํ•ด๋‹น
* ๊ธฐ๋Šฅ์€ Spring Boot ์—์„œ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ์ง€๋งŒ, RedisConnectionFactory ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•˜๊ธฐ ์œ„ํ•ด ์ง์ ‘ ์ƒ์„ฑ
*
* @return
*/
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}

@Value("${spring.redis.port}")
private int port;
/**
* ์บ์‹œ ๊ด€๋ฆฌ์ž
* <p>
* RedisCacheManager ๋ฅผ ํ†ตํ•ด Redis ์— ๋Œ€ํ•œ ์บ์‹œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์บ์‹œ์˜ ๊ธฐ๋ณธ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด RedisCacheConfiguration ์„ ์‚ฌ์šฉํ•œ๋‹ค.
*
* @param connectionFactory
* @return
*/
@Bean
public CacheManager gameCacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(
redisConnectionFactory());
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(
new GenericJackson2JsonRedisSerializer())) // Value Serializer ๋ณ€๊ฒฝ
.entryTtl(Duration.ofMinutes(30)); // ์บ์‹œ ์ˆ˜๋ช…
builder.cacheDefaults(configuration);
return builder.build();
}

@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}

@Bean
public CacheManager gameCacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory());
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) // Value Serializer ๋ณ€๊ฒฝ
.entryTtl(Duration.ofMinutes(30)); // ์บ์‹œ ์ˆ˜๋ช…
builder.cacheDefaults(configuration);
return builder.build();
}
@Bean
public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

@Bean
public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory){
final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setEnableTransactionSupport(true); // <=

redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setEnableTransactionSupport(true); // <=
return redisTemplate;
}

return redisTemplate;
}
/**
* StringRedisTemplate
* <p>
* StringRedisTemplate ์„ ํ†ตํ•ด Redis ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
*
* @param redisTemplate
* @return
*/
@Bean
public ListOperations<?, ?> redisListTemplate(RedisTemplate<?, ?> redisTemplate) {
return redisTemplate.opsForList();
}

@Bean
public ListOperations<?, ?> redisListTemplate(RedisTemplate<?, ?> redisTemplate) {
return redisTemplate.opsForList();
}
/**
* ConfigureRedisAction
* <p>
* Elasticache๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, CONFIG ๋ช…๋ น์–ด ์‚ฌ์šฉ์ด ์ œํ•œ๋จ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
*
* @return ConfigureRedisAction
*/
@Bean
public ConfigureRedisAction configureRedisAction() {
return ConfigureRedisAction.NO_OP;
}

}

0 comments on commit ea9b25c

Please sign in to comment.