List vs sorted set for sequences in Redis - Performance Comparison
When using Redis to store sequences, it is important to know how fast operations grow as the sequence gets bigger.
We want to see how the time to add, access, or remove items changes with the size of the sequence.
Analyze the time complexity of these Redis commands for lists and sorted sets.
# Using a List
LPUSH mylist value
LRANGE mylist 0 9
LREM mylist 1 value
# Using a Sorted Set
ZADD myzset 1 value
ZRANGE myzset 0 9
ZREM myzset value
This code adds, reads, and removes items from a list and a sorted set, which are two ways to store sequences in Redis.
Look at what repeats when these commands run.
- Primary operation: Adding, reading, and removing items from the data structure.
- How many times: Each command works on the sequence size, which can be many items.
As the sequence grows, the time to do these operations changes differently for lists and sorted sets.
| Input Size (n) | List Operations | Sorted Set Operations |
|---|---|---|
| 10 | Fast for push and range, slow for remove | Fast for add, range, and remove |
| 100 | Push and range still fast, remove slower | All operations remain efficient |
| 1000 | Remove becomes noticeably slower | Operations scale well |
Lists are quick to add and read from the start but removing items can take longer as the list grows. Sorted sets keep operations fast even as size grows.
Time Complexity: O(1) for LPUSH, O(k) for LRANGE, O(n) for LREM; O(log n) for ZADD, ZREM, and O(k) for ZRANGE
This means lists are very fast to add at the front and read ranges, but removing items can take longer as the list grows. Sorted sets keep add, remove, and range operations efficient even with large sequences.
[X] Wrong: "Lists and sorted sets have the same speed for all operations because they both store sequences."
[OK] Correct: Lists are simple sequences with fast push/pop at ends but slow removal inside. Sorted sets use a tree structure that keeps operations like add and remove faster even as size grows.
Understanding how Redis data structures behave as data grows shows you can choose the right tool for the job. This skill helps you design fast and scalable systems.
What if we changed the sorted set scores to be random instead of ordered? How would that affect the time complexity of range queries?
Practice
Solution
Step 1: Understand List behavior
Lists in Redis keep elements in the order they were added and allow duplicates.Step 2: Compare with Sorted Set
Sorted sets store unique elements sorted by score, so duplicates are not allowed.Final Answer:
List -> Option BQuick Check:
Duplicates allowed and order preserved = List [OK]
- Thinking Sorted Set allows duplicates
- Confusing Sets with Lists
- Assuming Hashes store sequences
Solution
Step 1: Identify command for sorted set insertion
ZADD adds elements with a score to a sorted set.Step 2: Check other commands
LPUSH adds to list, SADD adds to set, HSET adds to hash field.Final Answer:
ZADD myzset 10 element -> Option DQuick Check:
ZADD = add with score [OK]
- Using LPUSH for sorted sets
- Confusing SADD with ZADD
- Using HSET for sequences
LPUSH mylist aLPUSH mylist bLPUSH mylist cWhat will
LRANGE mylist 0 -1 return?Solution
Step 1: Understand LPUSH order
LPUSH adds elements to the head (start) of the list, so last pushed is first.Step 2: Trace the list after pushes
LPUSH mylist a: ["a"], then LPUSH mylist b: ["b", "a"], then LPUSH mylist c: ["c", "b", "a"]. LRANGE mylist 0 -1 returns ["c", "b", "a"].Final Answer:
["c", "b", "a"] -> Option CQuick Check:
LPUSH adds to head, so newest first [OK]
- Assuming LPUSH adds to tail
- Mixing order of elements
- Expecting error from LRANGE
ZADD myzset 1 elementZADD myzset NX 2 elementBut the score did not update as expected. What is the likely issue?
Solution
Step 1: Understand sorted set uniqueness
Sorted sets store unique elements; adding the same element updates its score by default.Step 2: Check if score updates require flags
By default, ZADD updates score if element exists; if it did not update, likely a misunderstanding or missing flag like NX or XX.Final Answer:
Sorted sets do not allow duplicate elements; score updates require special flag -> Option AQuick Check:
Sorted sets unique, score updates need care [OK]
- Thinking duplicates allowed in sorted sets
- Assuming ZADD syntax is wrong
- Trying to remove before adding
Solution
Step 1: Analyze requirement for sorting by timestamp
Sorted sets sort elements by numeric score, perfect for timestamps.Step 2: Handle duplicates with same timestamp
Sorted sets require unique elements, so append unique suffix to actions to allow duplicates with same score.Step 3: Compare with other options
Lists preserve order but cannot sort by timestamp easily; hashes and sets do not maintain order or allow sorting by score.Final Answer:
Use a Sorted Set with timestamps as scores; append a unique suffix to actions to allow duplicates -> Option AQuick Check:
Sorted set + unique elements for timestamp sorting [OK]
- Using List but losing timestamp sorting
- Ignoring uniqueness in sorted sets
- Using Hash or Set which don't sort
Ready to prove it?
Pass the test and this pattern moves unknown
