The challenge is structured in stages — from handling basic commands to implementing persistence, replication, and streams. Below is a checklist to track my progress through the stages.
Note: I am using this challenge as a chance to catch up with C, so code will be rough around the edges.
- Introduction
- Repository Setup
- Bind to a port
- Respond to PING
- Respond to multiple PINGs
- Handle concurrent clients
- Implement the ECHO command
- Implement the SET & GET commands
- Expiry
- Base stages complete!
- RDB file config
- Read a key
- Read a string value
- Read multiple keys
- Read multiple string values
- Read value with expiry
- Extension complete!
- Configure listening port
- The INFO command
- The INFO command on a replica
- Initial Replication ID and offset
- Send handshake (1/3)
- Send handshake (2/3)
- Send handshake (3/3)
- Receive handshake (1/2)
- Receive handshake (2/2)
- Empty RDB Transfer
- Single-replica propagation
- Multi Replica Command Propagation
- Command Processing
- ACKs with no commands
- ACKs with commands
- WAIT with no replicas
- WAIT with no commands
- WAIT with multiple commands
- The TYPE command
- Create a stream
- Validating entry IDs
- Partially auto-generated IDs
- Fully auto-generated IDs
- Query entries from stream
- Query with
-
- Query with
+
- Query single stream using ID range
- Query multiple streams using ID range
- Blocking reads
- Blocking reads without timeout
- Blocking reads using
$
TODO: Add sections
- https://beej.us/guide/bgnet/html/
- https://redis.io/docs/latest/commands/
- https://copyconstruct.medium.com/the-method-to-epolls-madness-d9d2d6378642
🗓️ Last updated: March 7, 2025 💡 Challenge link