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);
'Backend > Spring' 카테고리의 다른 글
Spring Boot Gradle Multi Modules 초간단 (0) | 2022.02.11 |
---|---|
Spring Webflux ExceptionHandler Functional Endpoints (0) | 2021.08.14 |
Spring Boot ReactiveRedisTemplate<String, Integer> (0) | 2021.08.14 |
Spring Boot MongoDB multi-document transactions (0) | 2021.08.14 |
Spring Webflux Annotated Controller @ClientIp (0) | 2021.07.31 |