동시성 제어를 Redisson과 AOP로 해결하기 #140
RTUnu12
started this conversation in
Show and tell
Replies: 1 comment
-
@transactional - timeout제가 조금 찾아보니까 해당 어노테이션에 timeout 을 설정하는 것은 해당 시간이 지날 때 까지 로직이 수행이 되지 않는다면 그 즉시, 롤백을 진행한다고 하네요? 더 나아가서 궁금한게 많은데, MySQL 의 기본 격리 수준이 REPEATABLE READ 인데 다른 트랜잭션에서 접근해서 변경된 데이터에 접근한다는게 될까 싶기도 해요 궁금한 내용
등등 ,, |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
문제 상황
Redisson
Spring Boot에서의 설정
일반적인 구현
불편한데요?
@Transactional
처럼, 어노테이션만 추가함으로써 적용되는 방식을 생각해야 합니다.AOP로 구현하기
RedissonLock
RedissonLockAspect
@RedissonLock
어노테이션이 메소드에 적용되면 위 기능이 동작하게 됩니다.TransactionAspect
@RedissonLock
이 적용된 메소드일 경우 Propagation.REQUIRES_NEW 옵션을 지정해 부모 트랜잭션의 유무에 관계없이 별도의 트랜잭션으로 동작하고, 트랜젝션 커밋 이후 락이 해제되도록 설정해야 합니다.기존 메소드에 적용
@Transactional
을 제거하고, 저희가 만들었던@RedissonLock(value = "#적용할 파라미터 이름")
을 메소드에 적용합니다.테스트 결과
제한 인원이 5명인 모임을 생성합니다.
한번에 200명이 요청하는 시나리오를 만듭니다.
결과
참고
Beta Was this translation helpful? Give feedback.
All reactions