🤔
spring
에서redis
를 사용해보면@Transaction
을 걸어도rollback
이 되지 않는 것을 확인 할 수 있습니다.redis에서 트랜잭션을 걸고 싶다면
exec()
,multi()
,discard()
를 사용하여야 합니다.
multi()
-> 트랜잭션 시작
exec()
-> commit
discard()
-> rollback
redisTemplate.multi(); // transaction 시작
redisTemplate.opsForValue().set("user1", "1");
redisTemplate.opsForValue().set("user2", "2");
redisTemplate.exec(); // transaction 종료
🧐위 방식의 경우 직접 트랜잭션 시작과 커밋, 롤백을 적용해주는 방법입니다.
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String,Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setEnableTransactionSupport(true); <-핵심
return template;
}
🫠
template.setEnableTransactionSupport(true)
로 설정해주게 된다면 현재 진행되고 있는 트랜잭션에 redis가 자동으로 참여하게 됩니다.
🫡이를 통해 보다 더 쉽게 트랜잭션을 관리 할 수 있습니다.