레디스로 대기큐 구현 질문
2
작성한 질문수 23
학습 중 궁금한 점이 있으시면 편하게 질문 주세요. 참고로 질문이 구체적일 수록 더 정확한 답변을 드릴 수 있습니다. 😊
안녕하세요. 강의를 듣고 있는 개발자입니다.
이전에 유튜브에서 선착순 예매 관련 영상을 봤었는데
해당 영상에서 레디스를 이용해서 대기큐를 구현하는 것을 설명해주셨는데 그거에 대해서 질문이 있습니다.
레디스의 소티드 셋에 넣고 폴링을 통해서 상태를 확인한다.
타 스케줄러가 소티드셋에서 꺼내서 액티브로 바꾼다 라는 설명이 있었는데, 정확히 어떤식으로 구현하는 건지가 궁금합니다.
스케줄러가 꺼내고 액티브 유저 set으로 집어 넣는건가요?
그리고 소티드셋에서 꺼내서 엑티브 유저로 만드는 작업은 원자적으로 처리되게 하는건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 김재연님.
레디스를 이용한 대기큐 구현과 관련된 질문을 주셨네요. Redis의 Sorted Set과 다른 구조를 사용하여 대기열을 관리하는 방법은 흔히 사용되는 패턴 중 하나로, 특히 선착순 예매나 순차적 작업 처리에 적합합니다.
Redis Sorted Set을 활용한 대기큐 구현 방법:
Sorted Set에 작업 추가:
- 사용자가 대기열에 들어가면, 해당 사용자나 작업에 대한 정보를 Redis의 Sorted Set에 추가합니다. 여기서 점수(score)는 예를 들어 작업의 우선순위나 추가 순서에 따라 결정됩니다.
- 사용자가 대기열에 들어가면, 해당 사용자나 작업에 대한 정보를 Redis의 Sorted Set에 추가합니다. 여기서 점수(score)는 예를 들어 작업의 우선순위나 추가 순서에 따라 결정됩니다.
폴링을 통한 상태 확인:
- 클라이언트는 정기적으로 Sorted Set을 폴링하여 자신의 작업 순서를 확인할 수 있습니다. 이 방법은 간단하지만, 폴링 주기가 짧을수록 Redis에 부하가 걸릴 수 있습니다.
- 클라이언트는 정기적으로 Sorted Set을 폴링하여 자신의 작업 순서를 확인할 수 있습니다. 이 방법은 간단하지만, 폴링 주기가 짧을수록 Redis에 부하가 걸릴 수 있습니다.
스케줄러의 역할:
- 다른 스케줄러가 주기적으로 Sorted Set에서 특정 수의 작업을 가져와서 ‘활성’ 상태로 변경합니다.
- 이 작업은 보통 스코어를 기준으로 정렬된 순서대로 수행됩니다. Redis의 ZRANGE와 같은 명령어를 활용하여 필요한 작업만 가져올 수 있습니다.
- 다른 스케줄러가 주기적으로 Sorted Set에서 특정 수의 작업을 가져와서 ‘활성’ 상태로 변경합니다.
원자적 처리:
- 작업을 대기 상태에서 활성 상태로 변경할 때, 원자적 처리를 보장하기 위해 Lua 스크립트를 사용할 수 있습니다. Lua 스크립트를 사용하면 ZREM과 추가적인 데이터 조작을 하나의 트랜잭션으로 묶어 실행할 수 있습니다.
- 작업을 대기 상태에서 활성 상태로 변경할 때, 원자적 처리를 보장하기 위해 Lua 스크립트를 사용할 수 있습니다. Lua 스크립트를 사용하면 ZREM과 추가적인 데이터 조작을 하나의 트랜잭션으로 묶어 실행할 수 있습니다.
예시 구현:
ZADD명령어로 사용자/작업을 대기열에 추가.
ZRANGE와ZREMRANGE를 통해 제일 앞의 작업을 가져오고 제거.
- Lua 스크립트를 활용하여 위의 작업을 하나의 원자적 연산으로 처리.
추가 정보:
Redis의 자료구조 및 방법론에 대한 더 많은 정보를 원하시면, Redis Container 해킹과 같은 기존 질문을 참조하시면 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
API LIMIT
0
27
1
캐시 무효화
0
23
2
Redis와 Kafca의 Pub/Sub 차이
0
30
2
27강 슬랙 테스트 부분도 누락된 것 같네요
1
36
2
22강 케글 연동 강의내용 누락된듯해요
1
33
2
한국투자증권 미국 주식 매매 수수료와 환전 수수료가 높은 경우 자동매매 베개투자법을 적용해도 괜찮을까요?
0
48
2
스크립트를 한번에 복사하고 싶습니다.
0
33
2
@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.
0
36
1
너무 흥미진진합니다..
1
41
2
SP를 아직도 사용하나요?
0
42
2
캐시전략 - Write-behind
0
42
2
모델 서빙과 관련된 강좌 출시 예정된 바가 있으신지 여쭤봅니다!
0
42
2
순위가 동률일 때의 처리에 대해 질문드립니다.
0
59
2
Singleton 관련 질문입니다.
1
77
2
Service Create/Update Record 운용과 Delete Record 미운용의 차이 질문
0
27
1
조회속도 개선에서 더 개선하는 방법이 궁금합니다.
0
52
2
라우팅 테이블 설정 중 궁금한게 있습니다.
0
48
1
Redlock 알고리즘 관해 궁금한게 있습니다!
0
77
2
좋아요/조회수 카운팅 병목현상에 대해서 궁금한점이 있습니다.
0
55
2
백엔드 서버 코드 변경에서 프론트엔드 서버가 값을 파싱하지 못하는 문제
0
100
1
강사님 GETDEL 관련해서 질문 있습니다
0
112
2
비밀번호를 걸고 실행된 레디스 서버에 lua 스크립트를 등록하는 경우
0
95
2
보안 설정을 한 수강생들은 Connection Settings에 비밀번호를 넣어야 추가되네요
0
75
2
Redis Container 해킹
0
127
1





