좋아요/조회수 카운팅 병목현상에 대해서 궁금한점이 있습니다.
64
작성한 질문수 2
좋아요, 조회수등 단순 카운트에서 Redis를 쓰는 이유중 하나로 RDB 의 병목현상을 말씀해 주셨는데
Redis의 INCR 명령어 역시 수만개의 좋아요 처리를 한다면 같은 이유로 병목 현상이 발생하는게 아닌지 궁금합니다.
답변 2
0
안녕하세요. 좋은 질문 주셨네요.
Redis도 싱글스레드이기 때문에 요청이 몰리면, 줄을 서는 것은 동일합니다.(RDB는 Lock으로 대기를 하는 거지만, 줄을 서는 것은 동일합니다.)
다만, 이 둘 간의 처리 속도는 상당히 차이가 납니다.
RDB: Lock 획득과 대기, Lock 해제 + Disk 쓰기(or WAL 기록) --> 수십 ~ 수백 마이크로초(µs) 소요
Redis INCR: 메모리 연산 1회 --> 수백 나노초(ns) 소요
(참고) 1 마이크로초 = 1,000 나노초
속도 차이가 100배~1000배 수준이라, 같은 수만 건을 처리할 때 RDB가 병목이 될 가능성이 더 큽니다.
물론 Redis도 감당 못 할 수준의 트래픽(초당 수백만 건 이상)이라면 뭔가 튜닝이 필요합니다.
0
안녕하세요, 인프런 AI 인턴입니다. portal.bj님.
좋아요 또는 조회수와 같은 단순 카운트 처리에서 Redis가 선호되는 이유에 대해 아주 좋은 질문을 주셨습니다. 실제로 이러한 카운트 작업에 RDBMS가 아닌 Redis를 사용하는 이유는 성능과 효율성에 큰 차이가 있기 때문입니다.
Redis 사용의 이유:
메모리 기반의 데이터 저장소: Redis는 메모리 기반의 데이터베이스로, 데이터의 접근 속도가 매우 빠릅니다. 따라서 수많은
INCR연산을 동시에 처리하는 데 있어 탁월한 성능을 보입니다.단일 스레드 모델: Redis는 단일 스레드로 작동하며, 이를 통해 데이터의 일관성과 동시성 문제를 효율적으로 해결합니다. 이는 특히 카운터처럼 잦은 갱신이 필요한 데이터에 유리합니다.
부하 분산: RDBMS는 디스크 기반으로 동작하여 I/O 병목이 발생할 가능성이 있으나, Redis는 메모리에서 모든 작업을 처리하므로 이러한 병목 현상을 잘 관리할 수 있습니다.
레이지 로딩 및 스냅샷: Redis는 데이터를 메모리에 올리고 주기적으로 스냅샷을 생성하여 비정상 종료 상황에서도 데이터 유실을 최소화합니다.
병목 현상에 대해:
INCR 명령어가 수만 개의 요청을 처리할 때 발생할 수 있는 병목 현상이 완전히 없는 것은 아닙니다. 하지만 Redis가 해당 연산을 처리하는 방식과 경량의 특성 덕분에 일반 RDBMS에서는 병목 현상이 날 상황에서도 보다 원활한 처리가 가능합니다. 저부하에서는 거의 문제없이 모든 요청을 소화할 수 있으며, 필요에 따라 샤딩(Sharding)을 통해 Redis 클러스터로 확장하는 방법도 고려할 수 있습니다.
질문하신 내용과 관련해 병목 현상 해결 방법 및 Redis 사용에 대한 더 많은 정보를 제공받을 수 있는 기존 질의응답을 확인해 보시면 유용할 것입니다:
- Redis Container 해킹: 이번 게시물에서는 Redis의 강점과 보안 설정에 관한 팁을 확인하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
레디스로 재고 관리
0
8
1
이제 인프런에서 강의 더 안산다. 후져....
0
18
0
소스코드 어디서 다운받아요?
0
30
5
Lock 해제 문의 드립니다.
0
27
2
답을언제쯤받아볼수있나요
0
27
2
프로젝트가 없어요..
0
44
2
강의 일정 및 수업 자료 공유 관련 문의드립니다!
0
29
1
레디스로 대기큐 구현 질문
0
64
2
API LIMIT
0
47
1
캐시 무효화
0
37
2
Redis와 Kafca의 Pub/Sub 차이
0
52
2
27강 슬랙 테스트 부분도 누락된 것 같네요
1
55
2
22강 케글 연동 강의내용 누락된듯해요
1
52
2
한국투자증권 미국 주식 매매 수수료와 환전 수수료가 높은 경우 자동매매 베개투자법을 적용해도 괜찮을까요?
0
69
2
스크립트를 한번에 복사하고 싶습니다.
0
43
2
@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.
0
45
1
너무 흥미진진합니다..
1
55
2
순위가 동률일 때의 처리에 대해 질문드립니다.
0
67
2
Redlock 알고리즘 관해 궁금한게 있습니다!
0
88
2
백엔드 서버 코드 변경에서 프론트엔드 서버가 값을 파싱하지 못하는 문제
0
111
1
강사님 GETDEL 관련해서 질문 있습니다
0
120
2
비밀번호를 걸고 실행된 레디스 서버에 lua 스크립트를 등록하는 경우
0
100
2
보안 설정을 한 수강생들은 Connection Settings에 비밀번호를 넣어야 추가되네요
0
80
2
Redis Container 해킹
0
133
1





