3.2 KiB
3.2 KiB
Got it 👍 — let’s break this down properly.
Redis has two broad classes you’re asking about:
- Basic key-space functions (SET, GET, DEL, EXISTS, etc.)
- Iteration commands (
SCAN
,SSCAN
,HSCAN
,ZSCAN
)
And for each I’ll show:
- What it does
- How it works at a high level
- Its RESP protocol implementation (the actual wire format).
1. Basic Key-Space Commands
SET key value
- Stores a string value at a key.
- Overwrites if the key already exists.
Protocol (RESP2):
*3
$3
SET
$3
foo
$3
bar
(client sends: array of 3 bulk strings: ["SET", "foo", "bar"]
)
Reply:
+OK
GET key
- Retrieves the string value stored at the key.
- Returns
nil
if key doesn’t exist.
Protocol:
*2
$3
GET
$3
foo
Reply:
$3
bar
(or $-1
for nil)
DEL key [key ...]
- Removes one or more keys.
- Returns number of keys actually removed.
Protocol:
*2
$3
DEL
$3
foo
Reply:
:1
(integer reply = number of deleted keys)
EXISTS key [key ...]
- Checks if one or more keys exist.
- Returns count of existing keys.
Protocol:
*2
$6
EXISTS
$3
foo
Reply:
:1
KEYS pattern
- Returns all keys matching a glob-style pattern.
⚠️ Not efficient in production (O(N)), better to use
SCAN
.
Protocol:
*2
$4
KEYS
$1
*
Reply:
*2
$3
foo
$3
bar
(array of bulk strings with key names)
2. Iteration Commands (SCAN
family)
SCAN cursor [MATCH pattern] [COUNT n]
- Iterates the keyspace incrementally.
- Client keeps sending back the cursor from previous call until it returns
0
.
Protocol example:
*2
$4
SCAN
$1
0
Reply:
*2
$1
0
*2
$3
foo
$3
bar
Explanation:
- First element = new cursor (
"0"
means iteration finished). - Second element = array of keys returned in this batch.
HSCAN key cursor [MATCH pattern] [COUNT n]
- Like
SCAN
, but iterates fields of a hash.
Protocol:
*3
$5
HSCAN
$3
myh
$1
0
Reply:
*2
$1
0
*4
$5
field
$5
value
$5
age
$2
42
(Array of alternating field/value pairs)
SSCAN key cursor [MATCH pattern] [COUNT n]
- Iterates members of a set.
Protocol and reply structure same as SCAN.
ZSCAN key cursor [MATCH pattern] [COUNT n]
- Iterates members of a sorted set with scores.
- Returns alternating
member
,score
.
Quick Comparison
Command | Purpose | Return Type |
---|---|---|
SET |
Store a string value | Simple string +OK |
GET |
Retrieve a string value | Bulk string / nil |
DEL |
Delete keys | Integer (count) |
EXISTS |
Check existence | Integer (count) |
KEYS |
List all matching keys (slow) | Array of bulk strings |
SCAN |
Iterate over keys (safe) | [cursor, array] |
HSCAN |
Iterate over hash fields | [cursor, array] |
SSCAN |
Iterate over set members | [cursor, array] |
ZSCAN |
Iterate over sorted set | [cursor, array] |