Pub/Sub Messaging in Redis

Pub/Sub Messaging

Welcome back! In this lesson, we will dive into another powerful feature of Redis: Publish/Subscribe (Pub/Sub) messaging. This topic builds on our understanding of Redis and introduces a dynamic way to enable real-time communication within your applications.

What You'll Learn

In this lesson, you will learn how to set up and use Redis Pub/Sub messaging to send and receive messages between different parts of your application. This is useful for creating real-time features like notifications, chat systems, or live updates.

Here's a sneak peek at how you can set up a simple Pub/Sub system in Redis:

Python
import redis
import time
import threading

client = redis.Redis(host='localhost', port=6379, db=0)

def message_handler(message):
    print(f"Received message: {message['data']}")

pubsub = client.pubsub()
pubsub.subscribe(**{'notifications': message_handler})

def run_pubsub():
    for message in pubsub.listen():
        if message['type'] == 'message':
            message_handler(message)

thread = threading.Thread(target=run_pubsub)
thread.start()

time.sleep(1)
publish_result = client.publish('notifications', 'Hello, Redis!')
print(f"Message published, number of subscribers that received the message: {publish_result}")

pubsub.unsubscribe()
thread.join()

Let's break down the code snippet above:

  • First, we create a message handler function that prints the message received.

  • Then, we create a pubsub object and subscribe to the notifications channel, note that we use **kwargs to pass the channel name and the message handler function.

  • We define a run_pubsub function that listens for messages with the pubsub.listen() method and calls the message_handler function when a message is received.

  • We start a new thread to run the run_pubsub function in the background.

  • Finally, we will publish a message to the channel notifications after a short delay and print the number of subscribers that received the message. In addition, the message_handler function will print the message received, and the output will be:

Python
Message published, number of subscribers that received the message: 1
Received message: b'Hello, Redis!'

Note that we need to use the unsubscribe method to stop listening to messages and join the thread to avoid running indefinitely.

Why It Matters

Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal