Using ZRANGEBYLEX for Lexicographic Queries in Redis
📖 Scenario: You are managing an online bookstore's Redis database. You want to query book titles stored in a sorted set by their alphabetical order.
🎯 Goal: Build a Redis query using ZRANGEBYLEX to retrieve book titles within a specific lexicographic range.
📋 What You'll Learn
Create a sorted set called books with specific book titles as members and the same score for all.
Define a lexicographic range using Redis range syntax with [ and (.
Use ZRANGEBYLEX to get book titles between two lexicographic boundaries.
Limit the number of results returned by ZRANGEBYLEX using the LIMIT option.
💡 Why This Matters
🌍 Real World
Lexicographic queries in Redis sorted sets are useful for autocomplete features, alphabetical listings, and filtering data by string ranges.
💼 Career
Understanding ZRANGEBYLEX helps in building efficient search and filtering features in applications using Redis as a fast in-memory database.
Progress0 / 4 steps
1
DATA SETUP: Create the sorted set books with book titles
Create a Redis sorted set called books and add these members with score 0: 'A Tale of Two Cities', 'Brave New World', 'Crime and Punishment', 'Don Quixote', 'Emma'.
Redis
Hint
Use ZADD with score 0 for all members to create the sorted set books.
2
CONFIGURATION: Define the lexicographic range boundaries
Define two variables: min_lex as [Brave New World and max_lex as [Emma to set the lexicographic range for the query.
Redis
Hint
Use Redis lexicographic range syntax with [ to include the boundary.
3
CORE LOGIC: Use ZRANGEBYLEX to query book titles in the lexicographic range
Write a Redis command using ZRANGEBYLEX on books with min_lex and max_lex to get all book titles between these boundaries.
Redis
Hint
Use the variables min_lex and max_lex directly in the ZRANGEBYLEX command.
4
COMPLETION: Add a LIMIT clause to restrict results to 2 items
Extend the ZRANGEBYLEX command to include LIMIT 0 2 to return only the first two book titles in the lexicographic range.
Redis
Hint
Use LIMIT 0 2 after the range arguments to limit results.
Practice
(1/5)
1. What does the Redis command ZRANGEBYLEX do?
easy
A. Returns members sorted by their score in descending order.
B. Returns members in a sorted set within a lexicographic range.
C. Deletes members from a sorted set based on lexicographic order.
D. Adds members to a sorted set with a lexicographic score.
Solution
Step 1: Understand the command purpose
ZRANGEBYLEX is used to get members from a sorted set based on their alphabetical order, not their score.
Step 2: Compare options with command behavior
Only Returns members in a sorted set within a lexicographic range. correctly describes that it returns members within a lexicographic range. Other options confuse sorting by score or modifying the set.
Final Answer:
Returns members in a sorted set within a lexicographic range. -> Option B
Quick Check:
ZRANGEBYLEX = Lexicographic range retrieval [OK]
Hint: ZRANGEBYLEX fetches by alphabetical order, not score [OK]
Common Mistakes:
Confusing lexicographic order with score order
Thinking it deletes or adds members
Assuming it sorts in descending order
2. Which of the following is the correct syntax to get members from 'myzset' between 'a' and 'c' inclusive using ZRANGEBYLEX?
easy
A. ZRANGEBYLEX myzset [a [c
B. ZRANGEBYLEX myzset (a (c
C. ZRANGEBYLEX myzset a c
D. ZRANGEBYLEX myzset {a {c
Solution
Step 1: Recall syntax for inclusive range
In ZRANGEBYLEX, square brackets [ ] mean inclusive boundaries.
Step 2: Match syntax with options
ZRANGEBYLEX myzset [a [c uses [a and [c, correctly including both 'a' and 'c'. Other options use parentheses or braces which mean exclusive or invalid.
Final Answer:
ZRANGEBYLEX myzset [a [c -> Option A
Quick Check:
Inclusive range uses [ ] brackets [OK]
Hint: Use [ ] for inclusive, ( ) for exclusive in ZRANGEBYLEX [OK]
Common Mistakes:
Using parentheses instead of brackets for inclusive range
Omitting brackets causing syntax errors
Using curly braces which are invalid here
3. Given a sorted set 'myzset' with members: ['apple', 'banana', 'carrot', 'date', 'egg'], what is the result of ZRANGEBYLEX myzset [banana (date?
medium
A. ['banana', 'carrot', 'date', 'egg']
B. ['banana', 'carrot', 'date']
C. ['carrot', 'date']
D. ['banana', 'carrot']
Solution
Step 1: Understand the range boundaries
Start is inclusive [banana], end is exclusive (date), so 'date' is not included.
Step 2: Select members in range
Members between 'banana' and before 'date' are 'banana' and 'carrot'. 'date' and 'egg' are excluded.
Final Answer:
['banana', 'carrot'] -> Option D
Quick Check:
Inclusive start, exclusive end excludes 'date' [OK]
Hint: Remember ( ) excludes the boundary member [OK]
Common Mistakes:
Including 'date' despite exclusive end
Including 'egg' which is outside range
Confusing inclusive and exclusive boundaries
4. You run ZRANGEBYLEX myzset [a [z LIMIT 0 2 but get an error. What is the likely cause?
medium
A. LIMIT requires both offset and count as integers.
B. LIMIT must come before the range arguments.
C. Range boundaries must use parentheses, not brackets.
D. myzset does not exist, causing the error.
Solution
Step 1: Check LIMIT syntax
LIMIT requires two integer arguments: offset and count. If either is missing or not integer, error occurs.
Step 2: Compare options
LIMIT requires offset and count to be valid integers; non-integer values (e.g., strings like "two" or malformed) cause syntax errors. Other options are incorrect: LIMIT follows the range arguments (not B), brackets are valid for inclusive (not C), non-existent key returns empty list (not D).
Final Answer:
LIMIT requires both offset and count as integers. -> Option A
Quick Check:
LIMIT needs two integer args [OK]
Hint: LIMIT needs two integers: offset and count [OK]
Common Mistakes:
Using LIMIT with missing or non-integer arguments
Placing LIMIT before range arguments
Confusing bracket types for range boundaries
5. You want to get exactly 3 members from 'myzset' starting after 'apple' (exclusive) up to 'date' (inclusive). Which command is correct?
hard
A. ZRANGEBYLEX myzset (apple (date LIMIT 0 3
B. ZRANGEBYLEX myzset [apple [date LIMIT 1 3
C. ZRANGEBYLEX myzset (apple [date LIMIT 0 3
D. ZRANGEBYLEX myzset [apple (date LIMIT 0 3
Solution
Step 1: Set correct range boundaries
Start after 'apple' means exclusive start: (apple). End up to 'date' inclusive means [date].
Step 2: Use LIMIT to get 3 members from start
LIMIT 0 3 means start at offset 0 and get 3 members.
Step 3: Verify options
Only ZRANGEBYLEX myzset (apple [date LIMIT 0 3 matches exclusive start, inclusive end, and correct LIMIT usage.
Final Answer:
ZRANGEBYLEX myzset (apple [date LIMIT 0 3 -> Option C