Skip to content

Latest commit

 

History

History
63 lines (34 loc) · 2.9 KB

레디스 대기열 설명.md

File metadata and controls

63 lines (34 loc) · 2.9 KB

토큰 대기열 관리 전략

image
  1. 사용자에게 토큰을 발급하면 중복발급인지 먼저 체크
  2. 사용자가 최대 최대 액티브 토큰이 현재 액티브된 토큰 보다 적고 웨이팅 토큰이 없을때 사용자는 active 큐에 저장되고 token의 상태를 Active로 해서 저장 이때 TTL은 10분을 준다.
  3. 반대일경우 Waiting 큐에 추가하고 토큰의 상태를 Wating으로 만듬. 그리고 해당 토큰은 별도의 TTL없이 기다림( 물론 TTL 줄수는 있는데, 혹시 몰라 안줬습니다.)
  4. 스케줄러가 액티브 큐에 있는 목록들을 가져와서 토큰value를 통해 토큰이 살아있는지 확인합니다.TTL이 만료되었으면 제거하기 위해
  5. 토큰이 없다면 액티브 큐에서 해당 토큰을 제거해주고 액티브 큐로 넣어주면서 토큰의 상태값은 Active로 만들어주고 TTL은 10분을 부여합니다.
image image

실제 호출 프로세스

1. 토큰 발급

image

  • 위 처럼 토큰이 발급 되면 토큰 밸류와 상태를 반환합니다.

2. 토큰 상태 조회

image

  • 별도의 대기열 상태도 조회가능합니다.

3. 예약 가능 좌석 조회

image

  • 토큰값을 통해 예약 가능한 좌석을 조회합니다.

4. 좌석 예약 요청

image

  • 토큰 값을 통해서 좌석을 예약을 요청합니다. (이때 낙관적 락을 통해 버전관리가 되어 좌석이 잠기면 예약이 불가능합니다.)

7. 결제 요청

image

  • 예약상태값이 RESERVING 일때, 결제가 성공됩니다.

8. 결제 후 토큰 만료

image

  • 결제가 완료 되면 토큰을 만료시킵니다.

데이터 관점

image

  • 예약 스케줄러가 돌면서 예약 중인 예약은 5분뒤 만료 처리를 합니다.

image

  • 좌석 역시 스케줄러가 돌면서 예약 가능한 좌석으로 변경하고

    예약될시 RESERVED로 처리합니다.