Bird
Raised Fist0
Redisquery~5 mins

PSUBSCRIBE for pattern matching in Redis

Choose your learning style10 modes available
Introduction
PSUBSCRIBE lets you listen to many channels at once by using patterns instead of exact names. This helps you get messages from groups of channels easily.
You want to get messages from all channels that start with 'news.'.
You want to listen to channels that end with '.updates'.
You want to monitor all channels containing the word 'chat'.
You want to subscribe to channels with similar names without listing each one.
You want to build a notification system that reacts to many related channels.
Syntax
Redis
PSUBSCRIBE pattern [pattern ...]
Patterns can include '*' to match any number of characters.
You can subscribe to multiple patterns at once by listing them.
Examples
Subscribe to all channels starting with 'news.'.
Redis
PSUBSCRIBE news.*
Subscribe to all channels ending with '.updates'.
Redis
PSUBSCRIBE *.updates
Subscribe to all channels containing 'chat' anywhere.
Redis
PSUBSCRIBE *chat*
Subscribe to channels starting with 'sports.' and 'news.'.
Redis
PSUBSCRIBE sports.* news.*
Sample Program
This example shows subscribing to all channels starting with 'news.'. Messages published to 'news.sports' and 'news.weather' will be received. Messages to 'chat.general' will not.
Redis
redis-cli
PSUBSCRIBE news.*

# Then in another terminal:
redis-cli
PUBLISH news.sports "Sports news here"
PUBLISH news.weather "Weather news here"
PUBLISH chat.general "Hello chat"

# The subscriber will receive messages only from channels matching 'news.*'
OutputSuccess
Important Notes
PSUBSCRIBE uses pattern matching with '*' as a wildcard for any characters.
Time complexity depends on the number of patterns and channels but is efficient for typical use.
Common mistake: Using PSUBSCRIBE when you want exact channel names; use SUBSCRIBE instead.
Use PSUBSCRIBE when you want to listen to many related channels without listing each one.
Summary
PSUBSCRIBE listens to channels matching patterns with wildcards.
It helps receive messages from groups of channels easily.
Use '*' in patterns to match any characters.

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