Welcome! In this unit, we will delve into implementing Pub/Sub for notifications within our Redis-based backend system project. You've already learned how to manage user data, handle transactions, and use streams for event logging. Now, we'll add another powerful feature to our project: real-time notifications using Redis Pub/Sub (publish/subscribe). This will enable our system to send and receive messages instantaneously.
In this unit, we'll focus on creating a simple real-time notification system using Redis Pub/Sub. Specifically, we'll cover:
- Publishing Messages: How to send notifications.
- Subscribing to Channels: How to receive and handle notifications.
Here is a quick refresh of how Pub/Sub works in Redis:
Python1import redis 2import json 3import redis 4import time 5 6# Connect to Redis 7client = redis.Redis(host='localhost', port=6379, db=0) 8 9# Function to publish messages to a channel 10def publish_message(channel, message): 11 client.publish(channel, json.dumps(message)) 12 13# Function to handle incoming messages 14def message_handler(message): 15 data = json.loads(message['data']) 16 print(f"Received message from {data['user']}: {data['text']}") 17 18# Function to subscribe to a channel 19def subscribe_to_channel(channel): 20 pubsub = client.pubsub() 21 pubsub.subscribe(**{channel: message_handler}) 22 return pubsub.run_in_thread(sleep_time=0.001) 23 24# Example usage 25channel_name = 'chat_room' 26thread = subscribe_to_channel(channel_name) 27 28message = {'user': 'alice', 'text': 'Hello everyone!'} 29publish_message('chat_room', message) 30 31# Giving some time for the subscription to set up 32time.sleep(1) 33thread.stop()
In this snippet, message_handler
processes incoming messages on the chat_room
channel. The subscribe_to_channel
function sets up the subscription and runs it in a separate thread. The publish_message
function sends a message to the specified channel, which is then received by the message_handler
and printed to the console.
Exciting, isn’t it? Now, it's time to put this into practice. Let's implement the complete code to build our real-time notification system.
Happy coding!