Python

[Python] redis - pub/sub 구현하기

비번변경 2024. 8. 28. 12:29

개요

2024.07.30-[Redis] Pub/Sub 개념, 2024.07.31-[Redis] Pub/Sub - 테스트에서 Pub/Sub 개념을 알아보고 간단히 테스트해 봤는데, 이번 글에서는 Python을 이용해 redis Pub/Sub 기능 구현해보려고 한다.

 

+ Python redis 라이브러리의 기본적인 사용법은 2023.06.03-[Python] redis 사용하기를 참고한다.

 

 

Subscribe

Python redis 라이브러리는 채널을 구독하고 새 메세지를 수신할 수 있도록 하는 pubsub 객체를 제공한다.

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
pubpub = r.pubsub()

pubpub.subscribe('test')
while True:
    message = pubpub.get_message()
    if message:
        print(message)

클라이언트는 pubsub.subscribe 함수로 채널을 구독할 수 있다. 보통 메시지 수신은 무한 루프 내에서 get_message 함수로 수신하는 것 같다.

get_message로 수신한 메시지는 아래 정보를 포함하는 딕셔너리이다.

- type : subscribe, unsubscribe, psubscribe. punsubscribe, message, pmessage 중 하나이다.

- pattern : 메세지가 게시된 채널과 일치하는 패턴. pmessage type 외에는 전부 None에 해당한다.

- channel : 구독하거나 구독을 취소한 채널 또는 메시지가 게시된 채널

- data : 메시지 데이터. subscribe, unsubscribe type인 경우에는 세션이 구독 중인 채널 수 또는 패턴 수에 해당하고, message, pmessage type인 경우에는 실제 메시지 데이터에 해당한다.

 

 

Publish

채널에 메시지를 전달하는 작업은 pubsub 객체를 통하지 않고 클라이언트 객체가 제공하는 publish 함수를 사용하여 수행할 수 있다.

import redis

r = redis.Redis(host='localhost',
                port=6379,
                decode_responses=True)
r.publish(channel='test', message='hello, world!')

위 코드를 실행하면 python 코드로 구독하고 있던 클라이언트에서 아래와 같이 수신한 메세지를 확인할 수 있다.

 

 

참고 문서

https://redis-py.readthedocs.io/en/stable/advanced_features.html#publish-subscribe

 

 

728x90