>  기사  >  데이터 베이스  >  Python에서 sub-pub 메커니즘을 사용하여 Redis 구독 및 게시를 구현하는 방법

Python에서 sub-pub 메커니즘을 사용하여 Redis 구독 및 게시를 구현하는 방법

王林
王林앞으로
2023-05-26 18:55:28888검색

먼저 redis의 pub/sub 기능을 소개합니다.

Pub/Sub 기능은 Publish and Subscribe의 약자로 발행과 구독 기능을 말합니다. 이벤트 기반 시스템에서 Pub/Sub는 현재 널리 사용되는 통신 모델입니다. 이벤트를 기본 통신 메커니즘으로 사용하여 대규모 시스템에 필요한 느슨하게 결합된 상호작용 모델(예: 클라이언트)을 제공합니다. 메소드는 수신에 관심이 있는 이벤트 또는 이벤트 유형을 표현하며, 게시자(예: 서버)는 구독자가 관심 있는 이벤트를 언제든지 관련 구독자에게 알릴 수 있습니다.

일반인의 관점에서 보면 내 하위 측(구독자)이 항상 듣고 있다는 뜻입니다. 일단 게시자 측(게시자)이 메시지를 게시하면 먼저 게시자 측에서 메시지를 받습니다.

#coding:utf-8
import time
import redis
 
number_list = ['300033', '300032', '300031', '300030']
signal = ['1', '-1', '1', '-1']
 
rc = redis.StrictRedis(host='***', port='6379', db=3, password='********')
for i in range(len(number_list)):
    value_new = str(number_list[i]) + ' ' + str(signal[i])
    rc.publish("liao", value_new)  #发布消息到liao

그럼 do it 구독자를 살펴보세요:

#coding:utf-8
import time
import redis
 
rc = redis.StrictRedis(host='****', port='6379', db=3, password='******')
ps = rc.pubsub()
ps.subscribe('liao')  #从liao订阅消息
for item in ps.listen():        #监听状态:有消息发布了就拿过来
    if item['type'] == 'message':
        print item['channel']
        print item['data']

데이터 구조, 즉 항목에 대해서는 다음과 유사합니다: {'pattern': None, 'type': 'message', 'channel': 'liao', 'data': '300033 1 '}이런 방식으로 채널을 사용하여 메시지가 속한 대기열을 확인할 수 있습니다. (프로그램 실행시 구독자 먼저 실행 후 퍼블리셔 프로그램 실행)

요약하자면 크게 두 가지입니다.

  • 첫 번째는 연결 방식입니다. Python을 사용하여 Redis에 연결하는 방법에는 세 가지가 있습니다. ① 라이브러리의 Redis 클래스(또는 거의 동일한 StrictRedis 클래스)를 사용합니다. ② ConnectionPool 연결 풀을 사용합니다(긴 연결을 유지할 수 있음). Sentinel 클래스(여러 개의 Redis 클러스터가 있는 경우 프로그램은 적절한 연결 자체를 선택합니다).

  • 두번째는 구독방법입니다. 여기서는 StrictRedis 클래스의 pubsub 메서드가 사용됩니다. Redis 메시지를 구독하는 방법은 연결이 성공한 후 시작되는 subscribe 또는 psubscribe 방법을 사용하는 것입니다. subscribe가 하나의 채널을 구독하는 것인 경우, psubscribe는 여러 채널을 구독할 수 있습니다(이와 같이 작성된 경우 매개변수인 채널은 목록이어야 합니다). 그런 다음 모니터링을 시작할 수 있습니다.

위 내용은 Python에서 sub-pub 메커니즘을 사용하여 Redis 구독 및 게시를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제