Redis Transactional - g-market/b-shop-backend GitHub Wiki
Redis Transaction ์ ์ฉ
-
redis command (multi / exec) ์ ํ์ฉํ ํธ๋์ญ์ ๊ณผ ๋กค๋ฐฑ
-
Transactional ์ด๋ ธํ ์ด์ ์ ํ์ฉํ ํธ๋์ญ์ ๊ณผ ๋กค๋ฐฑ
๋ ๋์ค์์
@Transactional
์ ์ธ์ ํธ๋์ญ์ ์ ์ฌ์ฉํ๋ ค๋ฉด JDBC๋ JPA์ ํธ๋์ญ์ ๋งค๋์ ์ ๋ถ์ฌ์ ์ฌ์ฉํด์ผํฉ๋๋ค.๋ฐ๋ผ์ ์๋น์ค์์ ๋ ๋์ค๋ง ์ฌ์ฉํ๊ณ ํธ๋์ญ์ ๋งค๋์ ๊ฐ ์๋ค๋ฉด
@Transactional
์ฌ์ฉ๋ชปํ๊ณ ์ง์ redis ํธ๋์ญ์ (multi/exec)๋ฅผ ์จ์ผํฉ๋๋ค.ํ์ฌ ์ ํฌ๋ JPA ํธ๋์ญ์ ๋งค๋์ ๋ฅผ ์ฌ์ฉํ๊ธฐ์ ์ด๋ฅผ ๋ถ์ด๋ฉด ๋ฉ๋๋ค.
JDBC๋ฅผ ์ฌ์ฉํ๋ฉด JDBC๋ฅผ ๋ถ์ด๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
- RedisConfig
ํธ๋์ญ์ ๋งค๋์ ๋ฅผ ์ถ๊ฐํ๋ค. ์ด๋ JDBC๋ JPA๋ฅผ ์ถ๊ฐ๋ก ์ฌ์ฉํฉ๋๋ค.
ref : https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#tx.spring
@RequiredArgsConstructor
@Configuration
public class RedisConfig {
private final RedisProperties redisProperties;
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setEnableTransactionSupport(true);
return redisTemplate;
}
@Bean
public StringRedisTemplate stringRedisTemplate() {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(redisConnectionFactory());
// explicitly enable transaction support
stringRedisTemplate.setEnableTransactionSupport(true);
return stringRedisTemplate;
}
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
}
@Bean
public PlatformTransactionManager transactionManager() {
return new JpaTransactionManager();
}
}
์ฃผ์ํ ์
RedisTemplate ์์ฑํ ๋ ํธ๋์ญ์ ๊ธฐ๋ฅ์ ์ผ ๋ค.
๋จ, ์ด๋ StringRedisTemplate
์ RedisTemplate
๋ฅผ ๋ณ๋๋ก ์ฌ์ฉํ๋ค๋ฉด ๋ณ๋๋ก ์ถ๊ฐํด์ค์ผํ๋ค.
RedisTemplate
์๋ง ๊ธฐ๋ฅ์ onํ๊ณ ๋น์ฆ๋์ค ๋ก์ง์์ StringRedisTemplate
์ ์ฌ์ฉํ๋ค๋ฉด ํธ๋์ญ์
์ด๋
ธํ
์ด์
์ด ์๋ํ์ง ์๋๋ค.
StringRedisTemplates๋ ๊ธฐ๋ณธ์ ์ผ๋ก RedisTemplate๋ฅผ ์์ํ๊ณ ์์ง๋ง ํธ๋์ญ์ ๊ธฐ๋ฅ์ด on ๋์ด์์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
// stringRedisTemplate
public class StringRedisTemplate extends RedisTemplate<String, String> {
public StringRedisTemplate() {
setKeySerializer(RedisSerializer.string());
setValueSerializer(RedisSerializer.string());
setHashKeySerializer(RedisSerializer.string());
setHashValueSerializer(RedisSerializer.string());
}