GETRANGE and SETRANGE let you read or change parts of a text stored in Redis without touching the whole text.
GETRANGE and SETRANGE in Redis
GETRANGE key start end SETRANGE key offset value
GETRANGE returns the substring from start to end (inclusive).
SETRANGE overwrites part of the string starting at offset with value. If the string is shorter, it is extended with zero-bytes.
mykey.GETRANGE mykey 0 4
mykey.SETRANGE mykey 6 "world"
mykey. Negative indexes count from the end.GETRANGE mykey -5 -1
This example first sets the string "Hello Redis!" to mykey. Then it gets the first 5 characters, which is "Hello". Next, it replaces the substring starting at position 6 with "World", changing the string to "Hello World!". Finally, it gets the entire updated string.
SET mykey "Hello Redis!" GETRANGE mykey 0 4 SETRANGE mykey 6 "World" GETRANGE mykey 0 -1
Indexes in GETRANGE are inclusive and zero-based.
SETRANGE returns the length of the string after the change.
If SETRANGE extends the string, the new bytes between old end and offset are zero-bytes (\x00).
GETRANGE reads a part of a string by specifying start and end positions.
SETRANGE replaces part of a string starting at a given offset with new text.
Both commands help work with substrings without rewriting the whole string.
Practice
GETRANGE key 0 4 do?Solution
Step 1: Understand GETRANGE parameters
The commandGETRANGE key start endreturns the substring from the start index to the end index inclusive.Step 2: Apply to given indices
With start=0 and end=4, it returns characters at positions 0,1,2,3,4 from the string stored atkey.Final Answer:
Returns substring from index 0 to 4 inclusive -> Option AQuick Check:
GETRANGE extracts substring = A [OK]
- Thinking GETRANGE deletes or modifies the string
- Confusing GETRANGE with SETRANGE
- Assuming end index is exclusive
Solution
Step 1: Recall SETRANGE syntax
The correct syntax isSETRANGE key offset value, where offset is the start position to replace and value is the new substring.Step 2: Check options
Only SETRANGE key offset value matches this syntax exactly.Final Answer:
SETRANGE key offset value -> Option BQuick Check:
Correct SETRANGE syntax = A [OK]
- Swapping offset and value positions
- Using GETRANGE instead of SETRANGE
- Using SET instead of SETRANGE
mykey is "HelloWorld", what will be the result of GETRANGE mykey 5 7?Solution
Step 1: Identify substring indices
The string is "HelloWorld" with indices: H(0), e(1), l(2), l(3), o(4), W(5), o(6), r(7), l(8), d(9).Step 2: Extract substring from index 5 to 7
Characters at 5,6,7 are 'W', 'o', 'r', so the substring is "Wor".Final Answer:
"Wor" -> Option DQuick Check:
GETRANGE returns substring = B [OK]
- Counting indexes starting at 1
- Including characters outside the range
- Confusing GETRANGE with SETRANGE
SETRANGE mykey 3 "abc" on a Redis string "abcdef". The result is unexpected. What is the likely mistake?Solution
Step 1: Understand SETRANGE usage
SETRANGE expects the substring value without quotes; quotes are interpreted literally.Step 2: Identify the mistake
Using quotes like "abc" inserts the quotes as characters, causing unexpected results.Final Answer:
Using quotes around substring causes wrong replacement -> Option AQuick Check:
Quotes in SETRANGE value cause errors = C [OK]
- Including quotes around substring value
- Assuming offset must be within string length
- Thinking SETRANGE creates new keys automatically
text holds the string "abcdefghij", what will be the final string after executing SETRANGE text 5 "XYZ" followed by GETRANGE text 3 7?Solution
Step 1: Apply SETRANGE at offset 5
Original string: "abcdefghij". SETRANGE replaces characters at positions 5,6,7 with "XYZ". Positions: a(0), b(1), c(2), d(3), e(4), f(5), g(6), h(7), i(8), j(9). After replacement: "abcdeXYZij".Step 2: Apply GETRANGE from 3 to 7
Characters at positions 3 to 7 are: d(3), e(4), X(5), Y(6), Z(7). So substring is "deXYZ".Final Answer:
"deXYZ" -> Option CQuick Check:
SETRANGE modifies substring, GETRANGE extracts it = D [OK]
- Not updating string before GETRANGE
- Miscounting offset positions
- Assuming GETRANGE returns original string
Ready to prove it?
Pass the test and this pattern moves unknown
