특정 핫딜에 트래픽이 몰리기 때문에 서버가 다운되거나 원활하지 못한 핫딜 판매가 이루어 지면 안된다.
Redis에서 제공하는 자료구조 중 하나인 Sorted Set
을 활용하여 모든 요청이 DB에 바로 부하가 가지 않고 차례대로 일정 범위만큼씩 처리하는 방법이 있다
일반적으로 Set 자료구조는 저장된 value들을 unique하게 관리하기 위해 사용된다. 이 때 저장된 value들 사이의 순서는 관리되지 않는다.
하지만 Redis에서 제공해주는 자료구조 중 하나인 Sorted Set(또는 ZSET, 둘다 동일한 말이다)은, 이름 그대로 Set의 특성을 그대로 가지면서 추가적으로 저장된 value들의 순서도 관리해준다.
정리하면 한 Key에 여러 value와 score를 가지고 있으며 중복되지 않는 value로 score순으로 데이터를 정렬한다는 것
Sorted Set Key에는 HOTDEAL_EVENT를 설정한다
Value에는 사용자명을 설정(username 혹은 email등 식별가능한 값중 unique한것으로)한다
Score에는 핫딜 구매를 하려는 사람들을 순서대로 정렬하기 위해, 핫딜 이벤트에 참여한 시간을 유닉스 타임(m/s) 값으로 넣어준다.
특정 이벤트에 몰리는 트래픽을 일정 범위 만큼씩(예를 들자면 대기열에서 1초당 10명) 이벤트 참여에 들어가게 되고 이를 통해서 위에서 언급한일정 범위만큼씩 처리를 통한 DB부하 방지
가 가능한 것이다.
reference:
https://jupiny.com/2020/03/28/redis-sorted-set/
https://www.youtube.com/watch?v=MTSn93rNPPE&t=710s