herodb/instructions/redis_basics.md
2025-08-16 06:58:04 +02:00

3.2 KiB
Raw Blame History

Got it 👍 — lets break this down properly.

Redis has two broad classes youre asking about:

  1. Basic key-space functions (SET, GET, DEL, EXISTS, etc.)
  2. Iteration commands (SCAN, SSCAN, HSCAN, ZSCAN)

And for each Ill 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 doesnt 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]