Redis Transactional - g-market/b-shop-backend GitHub Wiki

Redis Transaction ์ ์šฉ

  1. redis command (multi / exec) ์„ ํ™œ์šฉํ•œ ํŠธ๋žœ์žญ์…˜๊ณผ ๋กค๋ฐฑ

  2. Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•œ ํŠธ๋žœ์žญ์…˜๊ณผ ๋กค๋ฐฑ

๋ ˆ๋””์Šค์—์„œ @Transactional ์„ ์–ธ์ „ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด JDBC๋‚˜ JPA์˜ ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์„œ๋น„์Šค์—์„œ ๋ ˆ๋””์Šค๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๊ฐ€ ์—†๋‹ค๋ฉด
@Transactional์‚ฌ์šฉ๋ชปํ•˜๊ณ  ์ง์ ‘ redis ํŠธ๋žœ์žญ์…˜(multi/exec)๋ฅผ ์จ์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ €ํฌ๋Š” JPA ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ด๋ฅผ ๋ถ™์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.
JDBC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JDBC๋ฅผ ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  1. 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());
	}

์ฐธ๊ณ  ์ž๋ฃŒ