Redis TTL 동작 원리와 메모리 관리
로그인 세션이 24시간 뒤 자동 만료되지 않는다면 어떻게 될까? 사용자가 로그아웃을 깜빡하면 그 세션은 영원히 메모리에 남아있다. 수백만 명이 사용하는 서비스라면 Redis 메모리가 서서히 고갈되어 결국 장애로...
로그인 세션이 24시간 뒤 자동 만료되지 않는다면 어떻게 될까? 사용자가 로그아웃을 깜빡하면 그 세션은 영원히 메모리에 남아있다. 수백만 명이 사용하는 서비스라면 Redis 메모리가 서서히 고갈되어 결국 장애로...
새벽 2시, 서비스가 갑자기 다운됐다는 알림이 온다. Redis 마스터 서버의 디스크가 고장났다. 데이터는? 서비스 재개까지 걸리는 시간은? 복제 없이 단일 Redis만 운영 중이었다면 모든 캐시 데이터가 날아...
비유로 시작하기
재고 감소 로직을 생각해보자. GET으로 재고를 읽고, 0보다 크면 DECR로 줄인다. 두 명령 사이에 다른 요청이 끼어들면 재고가 -1이 되는 순간이 생긴다. 이 틈을 없애는 것이 Lua 스크립트다. 두 명령...
쿠팡 타임세일, 1초에 10만 명이 몰린다. 재고는 딱 1개. 10만 명 중 정확히 1명만 구매에 성공해야 한다. 서버는 10대. 각 서버가 동시에 “재고 있음”을 확인하고 결제를 진행한다면 어떻게 될까?
블랙프라이데이 자정, 한정판 운동화 1켤레에 5만 명이 동시 접속한다. 서버 20대가 동시에 “재고 1개 남음”을 확인하고 저마다 결제를 진행한다면? 한 사람만 사야 할 물건이 20명에게 팔린다. 분산 락은 “...
실시간 랭킹을 구현해야 한다면? MySQL로 매 요청마다 ORDER BY score DESC를 돌리면 수천 명이 동시 접속할 때 DB가 버티지 못한다. Redis Sorted Set 하나로 수백만 명의 점수를 ...
개발 환경에서 잘 돌아가던 Redis가 프로덕션에서 새벽에 죽었다. 마스터 한 대뿐이었고, 자동 복구 수단도 없었다. 엔지니어가 잠에서 깨 수동으로 레플리카를 마스터로 승격시키기까지 20분이 걸렸다. 센티넬이 ...