본문 바로가기

Backend/Spring

Spring Boot Reactive Redis Transaction

Spring Boot Reactive Redis를 사용할 때 Transaction 동작시키는 코드에요.

RedisConfiguration.java

@Configuration
@RequiredArgsConstructor
public class CouponRedisConfiguration {

  @Value("${spring.redis.host}")
  private String host;

  @Value("${spring.redis.port}")
  private int port;

  @Bean
  public RedisClient redisClient() {
    return RedisClient.create(RedisURI.builder()
        .withHost(this.host)
        .withPort(this.port)
        .build());
  }
}

 

RedisOperation.java

@Component
@RequiredArgsConstructor
public class RedisCustomOperation {
  private final RedisClient redisClient;

  public Mono<TransactionResult> addAndCount(String key, String value) {
    RedisReactiveCommands<String, String> commands = redisClient.connect().reactive();
    return commands.multi()
        .doOnNext(multi -> {
          commands.sadd(key, value).subscribe();
          commands.scard(key).subscribe();
        })
        .flatMap(multi -> commands.exec());
  }

TransactionResult 사용

TransactionResult에서 데이터를 받아오실 때는 요런 식으로 받아오시면 되요.

커맨드를 실행한 순서대로 값이 담겨져 있습니다.

 

long result = transactionResult.get(0);
long count = transactionResult.get(1);