Bird
Raised Fist0
Redisquery~15 mins

PSUBSCRIBE for pattern matching in Redis - Deep Dive

Choose your learning style10 modes available
Overview - PSUBSCRIBE for pattern matching
What is it?
PSUBSCRIBE is a Redis command that lets clients listen to messages published on channels matching a pattern. Instead of subscribing to one exact channel, you can subscribe to many channels that share a naming pattern. This helps you receive messages from multiple related channels without listing each one individually.
Why it matters
Without PSUBSCRIBE, you would have to subscribe to each channel one by one, which is inefficient and hard to manage when channels are dynamic or numerous. PSUBSCRIBE solves this by allowing flexible, pattern-based listening, making real-time messaging systems scalable and easier to maintain.
Where it fits
Before learning PSUBSCRIBE, you should understand basic Redis Pub/Sub and how SUBSCRIBE works for exact channels. After mastering PSUBSCRIBE, you can explore advanced Redis messaging patterns, message filtering, and building scalable event-driven applications.
Mental Model
Core Idea
PSUBSCRIBE lets you listen to many channels at once by matching their names with a pattern.
Think of it like...
Imagine you want to listen to all radio stations that start with 'Jazz'. Instead of tuning into each station separately, you set your radio to catch any station whose name begins with 'Jazz'. PSUBSCRIBE works the same way for Redis channels.
┌─────────────┐
│ PSUBSCRIBE  │
└─────┬───────┘
      │ pattern: 'news.*'
      ▼
┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│ news.sports │   │ news.weather│   │ news.local  │
└─────────────┘   └─────────────┘   └─────────────┘
      ▲                 ▲                 ▲
      └──── Messages matching pattern ──┘
Build-Up - 7 Steps
1
FoundationUnderstanding Redis Pub/Sub Basics
🤔
Concept: Learn how Redis Pub/Sub works with exact channel subscriptions.
Redis Pub/Sub allows clients to subscribe to channels and receive messages published on them. Using SUBSCRIBE, a client listens to one or more exact channel names. When a message is published on those channels, the client receives it immediately.
Result
Clients receive messages only from the exact channels they subscribed to.
Understanding exact channel subscription is essential before exploring pattern-based subscriptions.
2
FoundationWhat is Pattern Matching in Redis?
🤔
Concept: Introduce the idea of matching multiple channels using patterns with wildcards.
Redis supports patterns with wildcards like '*' to match multiple channel names. For example, 'news.*' matches 'news.sports', 'news.weather', etc. This allows subscribing to many channels with one pattern.
Result
Patterns can match multiple channel names dynamically.
Knowing how patterns work helps you listen to groups of channels without listing each one.
3
IntermediateUsing PSUBSCRIBE Command
🤔Before reading on: do you think PSUBSCRIBE listens to exact channels or patterns? Commit to your answer.
Concept: PSUBSCRIBE lets clients subscribe to channels matching a pattern instead of exact names.
The PSUBSCRIBE command takes one or more patterns as arguments. Clients receive messages from all channels whose names match any of these patterns. For example, PSUBSCRIBE news.* listens to all channels starting with 'news.'.
Result
Client receives messages from all matching channels dynamically.
PSUBSCRIBE expands the flexibility of Pub/Sub by enabling dynamic, pattern-based listening.
4
IntermediatePattern Syntax and Wildcards
🤔Before reading on: do you think the '*' wildcard matches zero or more characters or just one? Commit to your answer.
Concept: Learn the specific pattern syntax Redis uses for matching channel names.
Redis patterns use '*' to match zero or more characters, '?' to match exactly one character, and '[]' to match a set or range of characters. For example, 'news.*' matches 'news.' plus anything after, 'news.?' matches 'news.a' but not 'news.ab'.
Result
You can create precise or broad patterns to control which channels you listen to.
Understanding pattern syntax prevents unexpected matches or misses in your subscriptions.
5
IntermediateReceiving Messages with PSUBSCRIBE
🤔
Concept: How messages are delivered to clients subscribed with PSUBSCRIBE.
When a message is published on any channel matching a subscribed pattern, Redis sends a message to the client with the channel name and message content. The client can then handle messages from multiple channels transparently.
Result
Clients get real-time messages from all matching channels with channel info included.
Knowing message format helps you write clients that can distinguish and process messages correctly.
6
AdvancedPSUBSCRIBE vs SUBSCRIBE Performance
🤔Before reading on: do you think PSUBSCRIBE is faster, slower, or the same speed as SUBSCRIBE? Commit to your answer.
Concept: Explore performance differences and tradeoffs between exact and pattern subscriptions.
PSUBSCRIBE requires Redis to match each published message's channel name against all subscribed patterns, which can be slower than exact SUBSCRIBE. However, it reduces client complexity and subscription management when many channels are involved.
Result
PSUBSCRIBE trades some performance for flexibility and scalability.
Understanding this tradeoff helps you choose the right subscription method for your use case.
7
ExpertInternal Pattern Matching Mechanism
🤔Before reading on: do you think Redis uses regex or simple glob-style matching internally for PSUBSCRIBE? Commit to your answer.
Concept: Redis uses a simple glob-style pattern matching algorithm internally for PSUBSCRIBE.
Redis implements pattern matching with a lightweight glob-style matcher, not full regular expressions. This keeps matching fast and predictable. When a message is published, Redis checks all patterns subscribed by clients to see if the channel name matches, then routes the message accordingly.
Result
Pattern matching is efficient but limited to simple wildcards.
Knowing the matching mechanism explains why complex regex patterns are not supported and helps optimize pattern design.
Under the Hood
When a client issues PSUBSCRIBE with patterns, Redis stores these patterns in a subscription list. On each PUBLISH command, Redis iterates over all pattern subscriptions and uses a glob-style matcher to check if the published channel matches any pattern. If matched, Redis sends the message to the subscribing clients with the channel name and message content.
Why designed this way?
Redis uses simple glob-style matching instead of regex to keep the matching fast and lightweight, suitable for high-throughput messaging. Complex regex would slow down message delivery and increase CPU usage, which is undesirable in a fast in-memory database.
┌───────────────┐
│ Client PSUBSCRIBE 'news.*' │
└───────┬───────┘
        │ Stores pattern
        ▼
┌─────────────────────────────┐
│ Redis Pattern Subscription List │
│  - 'news.*'                 │
│  - 'chat.room.*'            │
└─────────────┬───────────────┘
              │
      PUBLISH 'news.sports' "Goal!"
              │
              ▼
┌─────────────────────────────┐
│ For each pattern:            │
│  Match 'news.sports' to 'news.*' → true │
│  Send message to client      │
└─────────────────────────────┘
Myth Busters - 4 Common Misconceptions
Quick: Does PSUBSCRIBE receive messages from channels that do NOT match the pattern? Commit yes or no.
Common Belief:PSUBSCRIBE receives messages from all channels once subscribed.
Tap to reveal reality
Reality:PSUBSCRIBE only receives messages from channels whose names match the subscribed patterns exactly.
Why it matters:Assuming PSUBSCRIBE receives all messages can cause missed data or unexpected silence in your application.
Quick: Does the '*' wildcard match exactly one character or zero or more? Commit your answer.
Common Belief:The '*' wildcard matches exactly one character in patterns.
Tap to reveal reality
Reality:The '*' wildcard matches zero or more characters, allowing broad matching.
Why it matters:Misunderstanding wildcard behavior leads to incorrect pattern subscriptions and missed messages.
Quick: Is PSUBSCRIBE faster than SUBSCRIBE because it matches multiple channels at once? Commit yes or no.
Common Belief:PSUBSCRIBE is always faster than SUBSCRIBE because it handles many channels with one command.
Tap to reveal reality
Reality:PSUBSCRIBE can be slower because Redis must check each published message against all patterns, adding overhead.
Why it matters:Ignoring performance costs can cause scalability issues in high-load systems.
Quick: Does Redis support full regular expressions in PSUBSCRIBE patterns? Commit yes or no.
Common Belief:Redis PSUBSCRIBE supports full regular expressions for pattern matching.
Tap to reveal reality
Reality:Redis uses simple glob-style patterns, not full regex, for PSUBSCRIBE.
Why it matters:Expecting regex features can lead to incorrect pattern design and bugs.
Expert Zone
1
Pattern matching is case-sensitive, so 'News.*' and 'news.*' are different patterns.
2
PSUBSCRIBE patterns are matched against channel names at publish time, so dynamic channel creation works seamlessly.
3
Clients can mix SUBSCRIBE and PSUBSCRIBE commands to listen to exact and pattern channels simultaneously.
When NOT to use
Avoid PSUBSCRIBE when you need guaranteed low-latency or very high throughput on a small fixed set of channels; use SUBSCRIBE instead. For complex filtering beyond simple patterns, consider Redis Streams or external message brokers with advanced filtering.
Production Patterns
In production, PSUBSCRIBE is used for event-driven microservices to listen to groups of related events, such as all user activity channels 'user.*'. It simplifies client code and reduces subscription management overhead.
Connections
Regular Expressions
PSUBSCRIBE pattern matching is a simpler form of pattern matching compared to regular expressions.
Understanding regex helps appreciate the limitations and simplicity of Redis glob-style patterns.
Publish-Subscribe Messaging Pattern
PSUBSCRIBE is an implementation of the publish-subscribe pattern with pattern-based subscriptions.
Knowing the general pub-sub pattern clarifies why PSUBSCRIBE enables scalable, decoupled communication.
Event Filtering in Distributed Systems
PSUBSCRIBE provides basic event filtering by channel name patterns, similar to topic filters in messaging systems like MQTT or Kafka.
Recognizing PSUBSCRIBE as a form of event filtering helps understand its role in building reactive distributed applications.
Common Pitfalls
#1Subscribing with incorrect pattern syntax causing no messages received.
Wrong approach:PSUBSCRIBE news.?sports
Correct approach:PSUBSCRIBE news.*sports
Root cause:Misunderstanding that '?' matches exactly one character, so 'news.?sports' matches 'news.asports' but not 'news.sports'.
#2Expecting PSUBSCRIBE to receive messages from channels not matching the pattern.
Wrong approach:PSUBSCRIBE news.* // expecting messages from 'chat.general' channel
Correct approach:PSUBSCRIBE news.* // only receives messages from channels starting with 'news.'
Root cause:Confusing PSUBSCRIBE with a global message listener; it only matches specified patterns.
#3Using PSUBSCRIBE for very high-frequency channels causing performance issues.
Wrong approach:PSUBSCRIBE * // subscribing to all channels indiscriminately
Correct approach:SUBSCRIBE specific channels or use Redis Streams for high-throughput scenarios
Root cause:Not realizing that matching all channels adds overhead and can degrade Redis performance.
Key Takeaways
PSUBSCRIBE allows subscribing to multiple Redis channels using patterns with wildcards, enabling flexible message listening.
Patterns use simple glob-style syntax, where '*' matches zero or more characters and '?' matches exactly one character.
PSUBSCRIBE is more flexible but can be slower than SUBSCRIBE because Redis matches each published message against all patterns.
Understanding PSUBSCRIBE's pattern matching and message delivery format is essential for building scalable real-time applications.
PSUBSCRIBE is best used when you need to listen to dynamic or many related channels without managing each subscription individually.

Practice

(1/5)
1. What does the Redis command PSUBSCRIBE do?
easy
A. It subscribes to channels matching a pattern with wildcards.
B. It unsubscribes from all channels.
C. It publishes messages to a channel.
D. It deletes keys matching a pattern.

Solution

  1. Step 1: Understand the purpose of PSUBSCRIBE

    PSUBSCRIBE listens to messages from channels that match a given pattern, using wildcards like '*'.
  2. Step 2: Compare with other commands

    Unlike PUBLISH or UNSUBSCRIBE, PSUBSCRIBE focuses on pattern-based subscription.
  3. Final Answer:

    It subscribes to channels matching a pattern with wildcards. -> Option A
  4. Quick Check:

    PSUBSCRIBE = pattern subscription [OK]
Hint: PSUBSCRIBE listens to patterns, not single channels [OK]
Common Mistakes:
  • Confusing PSUBSCRIBE with PUBLISH
  • Thinking PSUBSCRIBE deletes keys
  • Mixing PSUBSCRIBE with UNSUBSCRIBE
2. Which of the following is the correct syntax to subscribe to all channels starting with 'news.' using PSUBSCRIBE?
easy
A. PSUBSCRIBE news?
B. PSUBSCRIBE news.*
C. PSUBSCRIBE news#
D. PSUBSCRIBE news+

Solution

  1. Step 1: Identify the wildcard for pattern matching

    In Redis PSUBSCRIBE, '*' matches any sequence of characters.
  2. Step 2: Match the pattern for channels starting with 'news.'

    The pattern 'news.*' matches all channels beginning with 'news.' followed by anything.
  3. Final Answer:

    PSUBSCRIBE news.* -> Option B
  4. Quick Check:

    '*' wildcard = correct syntax [OK]
Hint: Use '*' to match any characters in PSUBSCRIBE patterns [OK]
Common Mistakes:
  • Using '?' which matches exactly one character
  • Using '#' or '+' which are not Redis wildcards
  • Missing the dot after 'news'
3. Given the following Redis commands executed in order:
PSUBSCRIBE sports.*
PUBLISH sports.football "Goal!"
PUBLISH sports.basketball "Score!"
PUBLISH news.weather "Rain"

Which messages will the subscriber receive?
medium
A. "Goal!" and "Score!"
B. "Goal!" only
C. "Rain" only
D. All three messages

Solution

  1. Step 1: Understand the subscription pattern

    The subscriber listens to channels matching 'sports.*', meaning any channel starting with 'sports.'.
  2. Step 2: Check published messages against the pattern

    Messages on 'sports.football' and 'sports.basketball' match the pattern; 'news.weather' does not.
  3. Final Answer:

    "Goal!" and "Score!" -> Option A
  4. Quick Check:

    Pattern matches sports.* channels only [OK]
Hint: Only messages on matching channels are received [OK]
Common Mistakes:
  • Assuming all published messages are received
  • Confusing exact channel with pattern
  • Ignoring the pattern prefix
4. You run the command PSUBSCRIBE sports.* but receive no messages when publishing to sports.football. What is the most likely mistake?
medium
A. You published messages before subscribing.
B. You used SUBSCRIBE instead of PSUBSCRIBE.
C. You subscribed to sports.* but published to sportsfootball without a dot.
D. You used the wrong Redis server version.

Solution

  1. Step 1: Check the channel names for exact pattern match

    The pattern 'sports.*' matches channels starting with 'sports.' including the dot.
  2. Step 2: Identify mismatch in published channel

    Publishing to 'sportsfootball' (no dot) does not match 'sports.*' pattern.
  3. Final Answer:

    You subscribed to sports.* but published to sportsfootball without a dot. -> Option C
  4. Quick Check:

    Pattern requires exact prefix including dot [OK]
Hint: Check exact channel names match pattern including dots [OK]
Common Mistakes:
  • Confusing SUBSCRIBE with PSUBSCRIBE
  • Ignoring dot in channel names
  • Assuming order of commands affects delivery
5. You want to listen to all channels that contain the word 'chat' anywhere in their name using PSUBSCRIBE. Which pattern should you use?
hard
A. chat
B. chat*
C. *chat
D. *chat*

Solution

  1. Step 1: Understand the wildcard '*' usage

    '*' matches any sequence of characters, including none.
  2. Step 2: Create pattern to match 'chat' anywhere

    Using '*chat*' matches any channel with 'chat' anywhere in its name.
  3. Final Answer:

    *chat* -> Option D
  4. Quick Check:

    Use '*' before and after 'chat' to match anywhere [OK]
Hint: Use '*' before and after word to match anywhere [OK]
Common Mistakes:
  • Using 'chat' alone matches exact channel only
  • Using 'chat*' matches only channels starting with 'chat'
  • Using '*chat' matches only channels ending with 'chat'
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard