Redis 대기열

Redis 대기열

2022-06-04 last update

6 minutes reading Redis
Redis는 무료 소스 오픈 메모리 키 값 데이터 저장소입니다.Redis를 데이터베이스, 다른 데이터베이스의 캐시 또는 메시지 에이전트로 사용할 수 있습니다.
이 안내서는 Python Redis 대기열 라이브러리를 사용하여 Redis에서 작업 대기열을 실행합니다.

Redis 큐란 무엇입니까?


Python-Redis-Queue 또는 RQ는 간단하지만 기능이 강한 Python 라이브러리로 Redis와 함께 Worker를 사용하여 백그라운드에서 작업ques와 실행을 수행합니다.RQ는 초보자에게는 간단하지만 대형 프로젝트에는 여전히 강하다.
프로그램이 실행하는 것을 막을 수 있는 함수와 코드를 처리할 때, 대기열 작업의 기능은 반드시 없어서는 안 된다.이런 코드의 예는 네트워크 요청이다.
이 도구를 어떻게 사용하는지 토론해 봅시다.

환경 설정


우리가 계속하기 전에, 당신은 당신이 좋은 환경을 확보해야 합니다.이를 위해서는 실행 버전의 Redis 서버, Python 3 및 Pip을 설치해야 합니다.
Ubuntu 시스템의 설치 및 설정을 보여 드리겠습니다.
먼저 패키지를 업데이트하고 다음 명령을 사용하여 Redis 서버를 설치합니다.
sudo apt-get update

sudo apt-get install redis -y
완료되면 다음 명령을 사용하여 Redis 서버를 시작합니다.
sudo service redis-server start
다음 단계는 우리 시스템에 Python3과 pip를 설치하는 것입니다.Python이 설치되어 있으면 다음 섹션으로 이동합니다.
sudo apt-get install python3.9 python3-pip -y
다음은 pip를 사용하여 RQ 라이브러리를 설치합니다.
sudo pip3 install rq
위의 명령은 RQ 라이브러리를 다운로드하고 설치하여 사용할 수 있습니다.

Redis 대기열 사용


RQ 라이브러리를 사용하는 방법을 설명하기 위해 간단한 HTTP 요청을 사용합니다.우리의 예시에서 우리는 ipify에 대한 API 호출을 위한 간단한 함수를 만들 것입니다.org에서 현재 IP 주소를 가져옵니다.이 함수는 서버에 HTTP 요청을 보내는데 이것은 차단 함수라는 것을 의미한다.
간단한 python 파일을 만들고 IP 이름으로 지정합니다.py.다음 코드를 입력합니다.
import requests

def get_ip(url):

response = requests.get(url).json()

return response

print(get_ip("https://api.ipify.org?format=json"))
위의 코드는 현재 IP 주소를 반환합니다.요청은 몇 초가 걸리고 서버는 몇 초가 걸려야 응답할 수 있다는 것을 알 수 있습니다.이것은 이 블록을 실행하기 전에 나머지 코드가 막힐 것이라는 것을 의미한다.
위의 코드에 대한 응답 예는 다음과 같습니다.
{'ip': '185.156.46.41'}
함수가 프로그램의 실행을 막는 것을 방지하기 위해서, 우리는 그것을 RQ에 전달할 수 있으며, RQ는 비동기적인 작업으로 처리할 수 있다.
우리는 RQ 라이브러리를 가져와서 간단한 대기열을 만들고 차단 함수를 줄을 서서 이 점을 실현할 수 있다.
간단한python 파일을 만들고 이를 print\uip라고 합니다.그림과 같이 코드를 입력합니다.
from redis import Redis

from rq import Queue

from IP import get_ip

q = Queue(connection=Redis())

result = q.enqueue(get_ip, "https://api.ipify.org?format=json")
파일을 저장하고 닫습니다.
작업 디렉터리에서 줄을 서는 작업을 백그라운드에서 처리하기 위해worker를 실행해야 합니다.
worker는 코드에서 차단 작업을 수행하기 위해 백그라운드에서 실행되는Python 프로세스입니다.RQ는 Worker 기능을 사용하여 대기열 작업을 수행합니다.
이전 예시의 코드를 실행하려면 새 터미널 창을 열고 작업 디렉터리 (python 코드가 있는 디렉터리) 로 이동하십시오.
다음 명령을 실행하여worker를 시작합니다.
rq worker --with-scheduler
위의 명령은 그림과 같이 Worker를 시작해야 합니다.

스케줄러가 필요하지 않으면 - with scheduler 옵션을 삭제할 수 있습니다.
워크플로가 실행되면 다음 코드를 실행합니다.
python3 print_ip.py
이제 Worker 창에서 인쇄된 작업에 대한 정보를 볼 수 있습니다. 그림과 같습니다.

이 함수의 비차단 기능에 대한 정확한 정보를 얻으려면 그 뒤에 인쇄 문장을 추가해 보십시오.
요청을 처리하는 데 시간이 걸리지만 인쇄 문장은 파일이 실행된 후에 바로 인쇄됩니다.

결론


이 설명서는 Redis 대기열 사용에 대한 기본 지식을 안내합니다.비록 우리는 이 안내서에서 간단한 예시를 사용했지만, 그것은 당신에게 더욱 복잡한 옵션을 실현하는 출발점을 제공할 수 있을 것입니다.자세한 내용은 RQ 문서를 참조하십시오.