Bird
Raised Fist0
Redisquery~10 mins

PSUBSCRIBE for pattern matching in Redis - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - PSUBSCRIBE for pattern matching
Client sends PSUBSCRIBE with pattern
↓
Server registers pattern subscription
↓
Messages published to channels
↓
Server matches published channel names to patterns
↓
If match, server sends message to client
↓
Client receives messages matching pattern
The client subscribes to channel name patterns. The server sends messages for any published channel matching those patterns.
Execution Sample
Redis
PSUBSCRIBE news.*

# Server sends messages published to channels like 'news.sports', 'news.weather' to client
Client subscribes to all channels starting with 'news.' and receives messages published to those channels.
Execution Table
StepActionPattern SubscribedPublished ChannelPattern Match?Message Sent to Client
1Client sends PSUBSCRIBEnews.*N/ANo
2Message publishednews.*news.sportsYesYes
3Message publishednews.*news.weatherYesYes
4Message publishednews.*sports.newsNoNo
5Message publishednews.*newsNoNo
6Message publishednews.*news.sports.footballYesYes
7Client unsubscribesnews.*N/ANo
8Message publishednews.*news.sportsNo (unsubscribed)No
💡 Client unsubscribed from pattern; no further messages sent.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 7Final
Subscribed Patterns[]["news.*"]["news.*"][][]
Messages Received[][]["news.sports"]["news.sports", "news.weather", "news.sports.football"]["news.sports", "news.weather", "news.sports.football"]
Key Moments - 3 Insights
Why does 'news.sports.football' match the pattern 'news.*'?
Because the pattern 'news.*' matches any channel starting with 'news.' followed by any characters, including dots. This is shown in execution_table row 6 where the match is Yes.
Why doesn't 'sports.news' match the pattern 'news.*'?
Because 'sports.news' does not start with 'news.', so it does not match the pattern. This is shown in execution_table row 4 where the match is No.
What happens when the client unsubscribes from the pattern?
After unsubscribing (step 7), the client no longer receives messages even if channels match the pattern, as shown in step 8 where no message is sent.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, which channel was published and did it match the pattern?
A"news.sports", Yes
B"sports.news", No
C"news.weather", Yes
D"news", No
💡 Hint
Check row 3 under Published Channel and Pattern Match? columns.
At which step does the client stop receiving messages?
AStep 8
BStep 7
CStep 5
DStep 6
💡 Hint
Look at the exit_note and step 8 in execution_table where no message is sent after unsubscribe.
If the pattern was changed to 'news.sports*', which published channel would NOT send a message?
A"news.sports.football"
B"news.weather"
C"news.sports"
D"news.sports.basketball"
💡 Hint
Consider which channels start exactly with 'news.sports' as per pattern matching rules.
Concept Snapshot
PSUBSCRIBE lets clients subscribe to channel name patterns.
Patterns use '*' as wildcard for any characters.
Server sends messages for any published channel matching the pattern.
Useful to listen to groups of related channels.
Unsubscribe stops receiving matching messages.
Pattern matching is prefix-based with wildcards.
Full Transcript
PSUBSCRIBE in Redis allows a client to subscribe to channels using patterns with wildcards. When the client sends PSUBSCRIBE with a pattern like 'news.*', the server registers this subscription. Whenever a message is published to any channel matching this pattern, such as 'news.sports' or 'news.weather', the server sends the message to the client. Channels that do not match the pattern, like 'sports.news', do not trigger messages. If the client unsubscribes from the pattern, no further messages are sent even if channels match. This visual trace shows each step: subscribing, messages published, pattern matching, messages sent, and unsubscribing. It helps beginners see how pattern matching works in real time and understand why some messages are received and others are not.

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