redis를 같은 트랜잭션에 묶어보기

greenTea·2023년 7월 11일
0

🤔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 종료

🧐위 방식의 경우 직접 트랜잭션 시작과 커밋, 롤백을 적용해주는 방법입니다.

redisTemplate 설정으로 트랜잭션 적용

 	@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가 자동으로 참여하게 됩니다.

setEnableTransactionSupport Javadoc 주석

🫡이를 통해 보다 더 쉽게 트랜잭션을 관리 할 수 있습니다.

profile
greenTea입니다.

0개의 댓글