개요
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