개요
이글을 보다가 좀더 기초 문법을 알고 싶다면 (기초 명령어)[https://donghokim.tistory.com/97]를 확인 하면 좋습니다.
이전 글 마지막 분석
목록에는 큐를 구현하는 데 적합하고 일반적으로 프로세스 간 통신 시스템의 구성 요소인 차단 작업에 적합한 특수 기능이 있습니다.
하나의 프로세스로 항목을 목록에 푸시하고 해당 항목에 대해 실제로 일종의 작업을 수행하기 위해 다른 프로세스를 사용한다고 상상해 보십시오.
이것은 일반적인 생산자/소비자 설정이며 다음과 같은 간단한 방법으로 구현할 수 있습니다.목록에 항목을 푸시하기 위해 생산자는 LPUSH를 호출합니다.
목록에서 항목을 추출/처리하기 위해 소비자는 RPOP을 호출합니다.
그러나 때로는 목록이 비어 있고 처리할 것이 없기 때문에 RPOP이 NULL을 반환할 수도 있습니다.
이 경우 소비자는 잠시 기다렸다가 RPOP로 다시 시도해야 합니다.
이를 폴링이라고 하며 몇 가지 단점이 있기 때문에 이 맥락에서 좋은 생각이 아닙니다.Redis와 클라이언트가 쓸모 없는 명령을 처리하도록 강제합니다(목록이 비어 있을 때의 모든 요청은 실제 작업을 수행하지 않고 NULL만 반환함).
작업자가 NULL을 수신한 후 일정 시간 대기하므로 항목 처리에 지연을 추가합니다.
지연 시간을 줄이기 위해 RPOP에 대한 호출 간 대기 시간을 줄여 문제 번호 1, 즉 Redis에 대한 쓸모 없는 호출을 증폭시키는 효과를 낼 수 있습니다.
따라서 Redis는 목록이 비어 있는 경우 차단할 수 있는 RPOP 및 LPOP 버전인 BRPOP 및 BLPOP이라는 명령을 구현합니다.
새 요소가 목록에 추가되거나 사용자 지정 시간 초과가 발생한 경우에만 호출자에게 반환됩니다..다음은 작업자에서 사용할 수 있는 BRPOP 호출의 예입니다.
> brpop tasks 5
1) "tasks"
2) "do_something"
이는 "목록 작업의 요소를 기다리지만 5초 후에 사용 가능한 요소가 없으면 반환"을 의미합니다.
0을 시간 제한으로 사용하여 요소를 영원히 기다릴 수 있으며 동시에 여러 목록을 대기하고 첫 번째 목록이 요소를 수신할 때 알림을 받기 위해 하나가 아닌 여러 목록을 지정할 수도 있습니다.
BRPOP에 대해 유의해야 할 몇 가지 사항:
클라이언트는 순서대로 제공됩니다.
목록 대기를 차단한 첫 번째 클라이언트는 요소가 다른 클라이언트에 의해 푸시될 때 먼저 제공됩니다.
반환 값은 RPOP와 다릅니다.
BRPOP 및 BLPOP은 여러 목록의 요소를 기다리는 것을 차단할 수 있기 때문에 키 이름도 포함하므로 2개 요소 배열입니다.
제한 시간에 도달하면 NULL이 반환됩니다.
목록 및 차단 작업에 대해 알아야 할 사항이 더 있습니다. 다음에 대해 자세히 읽어 보시기 바랍니다.LMOVE를 사용하여 더 안전한 대기열 또는 순환 대기열을 구축할 수 있습니다.
BLMOVE라는 명령의 차단 변형도 있습니다.
이전 글에 마지막에 테스트 후에 이 글을 작성 하는 것이다.
테스트 후기
- brpop key 10
- 결국 key에 데이터가 있으면 가져오고 없으면 데이터가 10초 동안 데이터가 있는지 기다린후에 데이터가 들어오면 바로 pop후에 return 합니다.
예
> brpop mylist 30 -> 명령어 입력후 다른 cmd 창에서 "lpush mylist a"를 30초 이내에 입력 하니 아래와 같은 데이터가 떴다
1) "mylist"
2) "a"
'DB' 카테고리의 다른 글
Redis 란?_Hash (0) | 2023.04.16 |
---|---|
Redis 란?_ Automatic creation and removal of keys (0) | 2023.04.16 |
Redis 란?_명령어_기초 (0) | 2023.04.16 |
Redis 란?_Key/value 규칙 (0) | 2023.04.16 |
Redis 란?_기본 정보 (0) | 2023.04.16 |