UNSUBSCRIBE behavior in Redis - Time & Space Complexity
When using Redis PUB/SUB, the UNSUBSCRIBE command stops the client from receiving messages on certain channels.
We want to understand how the time it takes to unsubscribe changes as the number of channels grows.
Analyze the time complexity of this Redis UNSUBSCRIBE command usage.
# Client is subscribed to multiple channels
UNSUBSCRIBE channel1 channel2 channel3
# Server removes client from these channels
# If no channels specified, unsubscribe from all
This code unsubscribes the client from one or more channels, or all if none are specified.
Look for repeated actions inside the UNSUBSCRIBE process.
- Primary operation: Removing the client from each specified channel's subscriber list.
- How many times: Once per channel to unsubscribe; if no channels given, once per all subscribed channels.
The time to unsubscribe grows with the number of channels you ask to leave.
| Input Size (channels to unsubscribe) | Approx. Operations |
|---|---|
| 10 | About 10 removals |
| 100 | About 100 removals |
| 1000 | About 1000 removals |
Pattern observation: The work grows directly with how many channels you unsubscribe from.
Time Complexity: O(n)
This means the time to unsubscribe grows in a straight line with the number of channels you remove.
[X] Wrong: "Unsubscribing from many channels happens instantly, no matter how many."
[OK] Correct: Each channel requires work to remove the client, so more channels mean more time.
Understanding how commands scale helps you write efficient code and explain your reasoning clearly in interviews.
What if Redis stored subscribers in a way that allowed instant removal regardless of channel count? How would the time complexity change?
Practice
UNSUBSCRIBE command do in Redis Pub/Sub?Solution
Step 1: Understand the purpose of UNSUBSCRIBE
The UNSUBSCRIBE command is used to stop receiving messages from channels you previously subscribed to.Step 2: Differentiate from other commands
It does not delete channels or send messages; it only stops message delivery to the client.Final Answer:
Stops receiving messages from specified channels -> Option DQuick Check:
UNSUBSCRIBE stops message delivery [OK]
- Thinking UNSUBSCRIBE deletes channels
- Confusing UNSUBSCRIBE with PUBLISH
- Assuming UNSUBSCRIBE creates subscriptions
Solution
Step 1: Recall UNSUBSCRIBE syntax
To unsubscribe from all channels, you call UNSUBSCRIBE without any arguments.Step 2: Check each option
UNSUBSCRIBE * uses '*', which is invalid syntax. UNSUBSCRIBE ALL and D are not valid Redis commands.Final Answer:
UNSUBSCRIBE -> Option CQuick Check:
UNSUBSCRIBE with no args unsubscribes all [OK]
- Using wildcard '*' with UNSUBSCRIBE
- Adding extra keywords like ALL
- Using parentheses in command
SUBSCRIBE news sports UNSUBSCRIBE newsWhat channels will the client still receive messages from?
Solution
Step 1: Analyze the subscription commands
The client subscribes to 'news' and 'sports' channels initially.Step 2: Apply UNSUBSCRIBE command
UNSUBSCRIBE news removes subscription to 'news' only, so 'sports' remains subscribed.Final Answer:
sports only -> Option BQuick Check:
UNSUBSCRIBE removes specified channels only [OK]
- Assuming UNSUBSCRIBE removes all subscriptions
- Confusing subscribed channels after UNSUBSCRIBE
- Thinking UNSUBSCRIBE adds subscriptions
UNSUBSCRIBE sports but still receive messages from the sports channel. What is the most likely cause?Solution
Step 1: Understand multiple subscriptions
Redis allows multiple subscriptions to the same channel from the same client connection.Step 2: Effect of UNSUBSCRIBE on multiple subscriptions
UNSUBSCRIBE removes one subscription per channel per call; if subscribed multiple times, some remain.Final Answer:
You have multiple subscriptions to sports and only one was removed -> Option AQuick Check:
Multiple subscriptions require multiple UNSUBSCRIBE calls [OK]
- Assuming one UNSUBSCRIBE removes all duplicates
- Thinking UNSUBSCRIBE syntax is wrong
- Believing Redis lacks UNSUBSCRIBE support
news, sports, and weather. It wants to stop receiving messages only from news and weather but keep sports. Which command should it use?Solution
Step 1: Identify channels to unsubscribe
The client wants to stop messages from 'news' and 'weather' only.Step 2: Use UNSUBSCRIBE with specific channels
UNSUBSCRIBE followed by channel names unsubscribes only those channels, keeping others subscribed.Final Answer:
UNSUBSCRIBE news weather -> Option AQuick Check:
UNSUBSCRIBE with channels removes only those [OK]
- Using UNSUBSCRIBE with no args removes all
- Trying UNSUBSCRIBE all which is invalid
- Unsubscribing wrong channels
Ready to prove it?
Pass the test and this pattern moves unknown
