LabHub

큐와 비동기 API · 큐 설계(순서·중복·유실) · 퀴즈

퀴즈: 큐 설계

LabHub 에서 이어서 보기

문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.

  1. `BRPOP` 으로 만든 큐가 메시지를 잃는 순간은?

    1. Redis 가 데이터를 정상 저장하고 재시작할 때
    2. 메시지를 꺼낸 뒤 처리 중에 소비자가 죽을 때
    3. 큐가 가득 찰 때
    4. TTL 이 만료될 때
  2. `LMOVE` 를 쓰는 이유는?

    1. 명령 한 번으로 끝나 왕복이 줄고 더 빨라서
    2. 꺼내기와 처리 중 목록 등록을 원자적으로 해서 유실 창을 없애려고
    3. 처리 중 목록을 따로 두지 않아 메모리를 아끼려고
    4. 여러 소비자 사이에서도 순서를 보장하려고
  3. Redis Stream 에서 `XREADGROUP` 으로 읽은 메시지는 어디에 남나?

    1. 확인응답 없이도 즉시 사라진다
    2. 실패로 간주돼 DLQ 스트림으로 간다
    3. PEL 에 남고 XACK 해야 지워진다
    4. 복제본에만 남고 마스터에서는 지워진다
  4. 소비자를 2대로 늘리면 FIFO 순서는?

    1. 보장되지 않는다 — 두 소비자의 처리 완료 순서를 알 수 없다
    2. 그대로 보장된다
    3. Redis 가 자동으로 보장한다
    4. 스트림이면 보장된다
  5. 스트림에 `MAXLEN` 을 걸지 않으면?

    1. 엔트리가 늘어 XRANGE 읽기가 느려진다
    2. XACK 해도 엔트리가 남아 메모리가 계속 자란다
    3. 오래된 엔트리부터 밀려나 순서가 깨진다
    4. 길이를 몰라 소비자 그룹을 만들 수 없다
  6. 여러 서비스가 같은 이벤트를 각자 소비해야 할 때 리스트 큐가 부적합한 이유는?

    1. 리스트는 한 번 꺼내면 사라져 다른 소비자가 같은 메시지를 볼 수 없어서
    2. 소비자가 늘수록 꺼내는 속도가 급격히 느려져서
    3. 소비자마다 사본이 생겨 메모리를 많이 써서
    4. 리스트 원소에 TTL 이 없어 메시지가 쌓이기만 해서