Bird
Raised Fist0
Redisquery~10 mins

List vs sorted set for sequences in Redis - Visual Side-by-Side Comparison

Choose your learning style10 modes available
Concept Flow - List vs sorted set for sequences
Start
↓
Choose data structure
↓
List
↓
Add elements at ends
↓
Retrieve by index
↓
Order is insertion order
↓
Sorted Set
↓
Add elements with scores
↓
Retrieve by score or rank
↓
Order by score
↓
Unique elements only
You start by choosing either a List or a Sorted Set to store sequences. Lists keep order by insertion and allow duplicates. Sorted Sets store unique elements with scores that define order.
Execution Sample
Redis
LPUSH mylist A
LPUSH mylist B
ZADD myzset 1 A
ZADD myzset 2 B
ZRANGE myzset 0 -1 WITHSCORES
This shows adding elements to a Redis List and a Sorted Set, then retrieving them.
Execution Table
StepCommandActionData Structure StateOutput
1LPUSH mylist AAdd 'A' to head of listList: ['A']1 (new length)
2LPUSH mylist BAdd 'B' to head of listList: ['B', 'A']2 (new length)
3ZADD myzset 1 AAdd 'A' with score 1Sorted Set: {'A':1}1 (added)
4ZADD myzset 2 BAdd 'B' with score 2Sorted Set: {'A':1, 'B':2}1 (added)
5ZRANGE myzset 0 -1 WITHSCORESRetrieve all elements by score ascendingSorted Set unchanged['A', '1', 'B', '2']
6LRANGE mylist 0 -1Retrieve all elements by indexList unchanged['B', 'A']
7LPUSH mylist AAdd duplicate 'A' to headList: ['A', 'B', 'A']3 (new length)
8ZADD myzset 3 AUpdate score of 'A' to 3Sorted Set: {'A':3, 'B':2}0 (updated)
9ZRANGE myzset 0 -1 WITHSCORESRetrieve all elements by score ascendingSorted Set unchanged['B', '2', 'A', '3']
10LRANGE mylist 0 -1Retrieve all elements by indexList unchanged['A', 'B', 'A']
11EndNo more commandsFinal statesSee above
💡 Commands complete; final states show List allows duplicates and order by insertion; Sorted Set orders by score and keeps unique elements.
Variable Tracker
Data StructureStartAfter Step 1After Step 2After Step 3After Step 4After Step 7After Step 8Final
List 'mylist'[]['A']['B', 'A']['B', 'A']['B', 'A']['A', 'B', 'A']['A', 'B', 'A']['A', 'B', 'A']
Sorted Set 'myzset'{}{}{}{'A':1}{'A':1, 'B':2}{'A':1, 'B':2}{'A':3, 'B':2}{'A':3, 'B':2}
Key Moments - 2 Insights
Why does the List allow duplicate elements but the Sorted Set does not?
The execution_table rows 7 and 8 show that adding 'A' again to the List adds a new element (step 7), but adding 'A' to the Sorted Set updates its score instead of adding a duplicate (step 8). Sorted Sets enforce uniqueness by element.
How is the order of elements determined differently in List and Sorted Set?
Rows 2 and 4 show List order is by insertion at head (new elements appear first), while Sorted Set order is by score ascending (rows 5 and 9). This means List keeps insertion order, Sorted Set sorts by score.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 7. What is the state of the List 'mylist'?
A['A', 'B', 'A']
B['B', 'A']
C['A', 'A', 'B']
D['B', 'A', 'B']
💡 Hint
Check the 'Data Structure State' column at step 7 in execution_table.
At which step does the Sorted Set update the score of an existing element?
AStep 4
BStep 8
CStep 3
DStep 7
💡 Hint
Look for 'Update score' action in the execution_table.
If you retrieve all elements from the Sorted Set after step 9, what order will they be in?
A['A', 'B']
B['A', 'A', 'B']
C['B', 'A']
D['B', 'A', 'B']
💡 Hint
Check the output of ZRANGE at step 9 in execution_table.
Concept Snapshot
Redis List stores sequences allowing duplicates and keeps insertion order.
Use LPUSH or RPUSH to add elements.
Retrieve by index with LRANGE.
Sorted Set stores unique elements with scores.
Use ZADD to add/update with score.
Retrieve ordered by score with ZRANGE.
Lists allow duplicates; Sorted Sets do not.
Lists order by insertion; Sorted Sets order by score.
Full Transcript
This visual execution compares Redis List and Sorted Set for sequences. Lists add elements at the head or tail and keep duplicates and insertion order. Sorted Sets add unique elements with scores that define order. The execution table shows commands adding elements, retrieving them, and updating scores. Lists allow duplicates as seen when 'A' is added twice. Sorted Sets update scores instead of duplicates. Retrieval from Lists returns elements in insertion order; Sorted Sets return elements ordered by score. This helps choose the right structure for your sequence needs.

Practice

(1/5)
1. Which Redis data structure allows storing duplicate elements while preserving their order?
easy
A. Hash
B. List
C. Sorted Set
D. Set

Solution

  1. Step 1: Understand List behavior

    Lists in Redis keep elements in the order they were added and allow duplicates.
  2. Step 2: Compare with Sorted Set

    Sorted sets store unique elements sorted by score, so duplicates are not allowed.
  3. Final Answer:

    List -> Option B
  4. Quick Check:

    Duplicates allowed and order preserved = List [OK]
Hint: Duplicates allowed? Use List, not Sorted Set. [OK]
Common Mistakes:
  • Thinking Sorted Set allows duplicates
  • Confusing Sets with Lists
  • Assuming Hashes store sequences
2. Which of the following Redis commands correctly adds an element with a score to a sorted set?
easy
A. HSET myhash field element
B. LPUSH mylist element
C. SADD myset element
D. ZADD myzset 10 element

Solution

  1. Step 1: Identify command for sorted set insertion

    ZADD adds elements with a score to a sorted set.
  2. Step 2: Check other commands

    LPUSH adds to list, SADD adds to set, HSET adds to hash field.
  3. Final Answer:

    ZADD myzset 10 element -> Option D
  4. Quick Check:

    ZADD = add with score [OK]
Hint: ZADD is for sorted sets with scores. [OK]
Common Mistakes:
  • Using LPUSH for sorted sets
  • Confusing SADD with ZADD
  • Using HSET for sequences
3. Given the following Redis commands executed in order:
LPUSH mylist a
LPUSH mylist b
LPUSH mylist c
What will LRANGE mylist 0 -1 return?
medium
A. ["a", "b", "c"]
B. ["b", "c", "a"]
C. ["c", "b", "a"]
D. Error

Solution

  1. Step 1: Understand LPUSH order

    LPUSH adds elements to the head (start) of the list, so last pushed is first.
  2. 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"].
  3. Final Answer:

    ["c", "b", "a"] -> Option C
  4. Quick Check:

    LPUSH adds to head, so newest first [OK]
Hint: LPUSH adds to front; last pushed appears first. [OK]
Common Mistakes:
  • Assuming LPUSH adds to tail
  • Mixing order of elements
  • Expecting error from LRANGE
4. You tried to add duplicate elements with different scores to a sorted set using:
ZADD myzset 1 element
ZADD myzset NX 2 element
But the score did not update as expected. What is the likely issue?
medium
A. Sorted sets do not allow duplicate elements; score updates require special flag
B. ZADD command syntax is incorrect
C. You must remove the element before adding it again
D. Redis lists should be used instead

Solution

  1. Step 1: Understand sorted set uniqueness

    Sorted sets store unique elements; adding the same element updates its score by default.
  2. 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.
  3. Final Answer:

    Sorted sets do not allow duplicate elements; score updates require special flag -> Option A
  4. Quick Check:

    Sorted sets unique, score updates need care [OK]
Hint: Sorted sets unique; score updates may need flags. [OK]
Common Mistakes:
  • Thinking duplicates allowed in sorted sets
  • Assuming ZADD syntax is wrong
  • Trying to remove before adding
5. You want to store a sequence of user actions with timestamps and retrieve them sorted by time, allowing multiple actions at the same timestamp. Which Redis data structure and approach is best?
hard
A. Use a Sorted Set with timestamps as scores; append a unique suffix to actions to allow duplicates
B. Use a List and store actions with timestamps as strings; order is insertion order
C. Use a Hash with timestamps as fields and actions as values
D. Use a Set to store actions; order does not matter

Solution

  1. Step 1: Analyze requirement for sorting by timestamp

    Sorted sets sort elements by numeric score, perfect for timestamps.
  2. Step 2: Handle duplicates with same timestamp

    Sorted sets require unique elements, so append unique suffix to actions to allow duplicates with same score.
  3. 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.
  4. Final Answer:

    Use a Sorted Set with timestamps as scores; append a unique suffix to actions to allow duplicates -> Option A
  5. Quick Check:

    Sorted set + unique elements for timestamp sorting [OK]
Hint: Sorted set + unique suffix for duplicates with same score. [OK]
Common Mistakes:
  • Using List but losing timestamp sorting
  • Ignoring uniqueness in sorted sets
  • Using Hash or Set which don't sort
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