Closed marinesnow34 closed 3 months ago
위의 사진처럼 카페에서 흔히 사용하는 익명의 유저를 호출하는 방법
익명의 유저
주문 번호
주문건 수
같은 영업일
같은 카페
순차
동일한 주문 번호
synchronized
다른 가게
sequence table
pessimistic Lock
dead lock
db
redis
싱글 쓰레드
race condition
따라서
key: 가게Id
value
set
orderId(UUID)
size
cron tab
의문? 다음과 같은 상황은 일어나지 않을 것인가??
(기대) 1번 사람이 set.push(uuid1) -> set.size() -> 결과 1개 2번 사람이 set.push(uuid2) -> set.size() -> 결과 2개 (예상) set.push(uuid1) set.push(uuid2) set.size() set.size() -> 2개 2개
해결2
MULTI
queue
spring boot
기대
INCR
주문 번호 란?
위의 사진처럼 카페에서 흔히 사용하는
익명의 유저
를 호출하는 방법요구 사항
주문 번호
를 통해 사장님이주문건 수
를 직관적으로 파악 가능 해야 함같은 영업일
,같은 카페
에 동일한 주문번호 X순차
적으로 증가해야 함문제 인식
동일한 주문 번호
가 발급 됨해결 1
synchronized
로 해결 함한계 1
다른 가게
에서 동시에 주문이 들어올 경우synchronized
로 인한 성능 저하 우려해결 2
sequence table
을 만들어pessimistic Lock
을 사용다른 가게
에서 동시 주문 성능 저하 개선한계 2
dead lock
이 우려스러움db
로 해결하는 것을 비선호뇌피셜 (작성자는
redis
를 잘 이해하지 못하고 있습니다.)redis
는싱글 쓰레드
이다. ->race condition
잘 발생 하지 않음redis
는 빠르다따라서
key: 가게Id
이고value
에set
을 사용set
에orderId(UUID)
를 집어 넣고size
를 가져옴cron tab
을 활용해서 주기적으로set
초기화 (매일 첫 주문 고객은 1번 이여야 함)의문? 다음과 같은 상황은 일어나지 않을 것인가??
(기대) 1번 사람이 set.push(uuid1) -> set.size() -> 결과 1개 2번 사람이 set.push(uuid2) -> set.size() -> 결과 2개 (예상) set.push(uuid1) set.push(uuid2) set.size() set.size() -> 2개 2개