redis-py와 같은 클라이언트 라이브러리는 프로토콜을 빌드하는 방법에 따라 하는 것이 일반적입니다. 이 경우 redis-py는 REdis 직렬화 프로토콜 또는 RESP를 구현합니다. 파이썬 Redis 클라이언트 라이브러리인 redis-py는 이 기사에서 곧 자세히 살펴볼 수 있도록 다르게 수행합니다. Redis 서버에 대한 실제 TCP 연결을 캡슐화하고 REEdis 직렬화 프로토콜(RESP)을 사용하여 직렬화된 바이트로 원시 명령을 서버로 보냅니다. 그런 다음 원시 응답을 가져와 바이트, int 또는 datetime.datetime과 같은 파이썬 개체로 다시 구문 분석합니다. 이 문제를 해결하기 위해 redis-py 3.0은 이 세 가지 명령을 모두 dict로 예상되는 매핑이라는 단일 위치 인수를 수락하도록 변경했습니다. MSET 및 MSETNX의 경우 dict는 키 이름 -> 값의 매핑입니다. ZADD의 경우, 딕트는 요소 이름 -> 점수의 매핑입니다. 이 프로토콜을 이행하는 부분은 원시 바이테스트에서 일부 Python 개체를 변환하고 Redis 서버로 보내고 응답을 다시 이해할 수있는 파이썬 개체로 구문 분석하는 것입니다. redis-py 2.X는 실수로 ZINCRBY의 인수 순서를 수정하여 값과 금액의 순서를 바꿨습니다. ZINCRBY는 이제 다음과 같습니다: 요약하자면 Redis 자체는 문자열을 키로만 허용합니다. redis-py는 궁극적으로 Redis 서버로 보내기 전에 모든 것을 바이트로 변환하지만 파이썬 유형이 받아 들일 수있는 것에 는 좀 더 자유롭습니다.
시작 과 끝은 파이썬 슬라이스 표기와 같은 음수 일 수 있지만, LRANGE와 같은 일부 Redis 명령에 대한 상당한 속도를 제공 할 수있는 빠른 파서가 포함 된 C 라이브러리 인 Hiredis도 있습니다. Hiredis는 틈새 시장에서 주변에 있는 것이 다치지 않는 선택적 가속기로 생각할 수 있습니다. 다음으로, 일반적인 Redis 명령 중 일부를 사용하고 순수 파이썬에서 어떻게 생겼는지 비교합니다. 위의 예는 pubsub.get_message()를 사용하고 있습니다. 뒤에서 get_message()는 시스템의 `선택` 모듈을 사용하여 연결소켓을 빠르게 폴링합니다. 읽을 수 있는 데이터가 있는 경우 get_message()는 메시지를 읽고 서식을 지정하고 반환하거나 메시지 처리기에 전달합니다. 읽을 데이터가 없는 경우 get_message()는 즉시 없음을 반환합니다. 이렇게 하면 응용 프로그램 내부의 기존 이벤트 루프에 통합하는 것이 간단합니다. Redis 구성은 읽기의 즐거움을 위해 Redis 소스에 있는 샘플 redis.conf 파일과 함께 자체 문서화됩니다. 당신이 생산 시스템에서 Redis를 사용하는 경우, 그것은 모든 산만을 차단하고 Redis의 장외에 익숙해하고 설정을 미세 조정하기 위해 전체이 샘플 파일을 읽을 시간이 걸릴 지불합니다.
이 예제를 코드에 적용하려면 다음 값을 데이터베이스의 값으로 바꿔야 합니다. 이러한 명령은 완전히 지원되지만 redis-py는 편의를 위해 Python 이터레이터를 반환하는 다음 메서드를 노출합니다: scan_iter, hscan_iter, sscan_iter 및 zscan_iter. redis-py는 EVAL, EVALSHA 및 스크립트 명령을 지원합니다. 그러나 이러한 명령을 실제 시나리오에서 사용하는 데 지루하게 만드는 여러 가지 에지 사례가 있습니다. 따라서 redis-py 는 스크립팅을 훨씬 쉽게 사용할 수 있도록 스크립트 개체를 노출합니다. 그런 다음 Redis 서버가 백그라운드에서 계속 실행되고 있는지 확인합니다.