Skip to content
Back to the catalog
Project redisDatabasesIntermediateComing soon

Build your own Redis

Build a Redis-compatible server from scratch. Implement RESP, an event loop and key expiry, then connect with the official redis-cli.

Build it in your language

The tester treats your program as a black box: any language works. These are just the most convenient ones for this project.

Guide language

The stage guides read in this language. Only languages this project is fully translated into show up here; the interface language does not change.

What this project is about

Project in preparation: we are completing and verifying the implementation path and its tests. The capabilities below describe the project goal; starting the project is not enabled yet.

Redis is fast because it is simple: one process, in-memory structures, and a protocol plain enough to read by eye. It's the perfect server to reimplement.

You'll speak RESP, Redis's protocol, and build a server the official redis-cli connects to without noticing the difference. You'll start with PING and finish with key expiry, transactions and persistence.

Roadmap

10 stages across 4 phases. Every stage comes with its guide and its tests: you move on when they pass.

  1. Phase 12 stages

    Speaking RESP

    Accept connections, parse the protocol and answer PING and ECHO.

  2. Phase 23 stages

    A real store

    SET, GET, DEL, data types and compatible errors.

  3. Phase 33 stages

    Time matters

    TTLs, lazy and active expiry, and list commands.

  4. Phase 42 stages

    Concurrency and persistence

    An event loop with many clients, MULTI/EXEC, and snapshots to disk.

Before you start

A Redis-compatible server: a RESP protocol parser and serializer, string and list commands, TTLs with lazy and active expiry, an event loop serving many clients, MULTI/EXEC transactions and periodic snapshots to disk.

  • key-value-db
    Coming soon

    Build your own key-value database

    Build a key-value database from scratch. Implement a storage engine with a write-ahead log, indexes and compaction to understand data persistence.

    Advanced14 stages~22 hDatabases
    WALindexescompaction+1

    Go · Rust

  • sqlite-reader
    Coming soon

    Build your own SQLite reader

    Build a SQLite reader from scratch. Open a real database file, walk its B-trees and run SELECT queries by decoding the documented binary format.

    Advanced10 stages~15 hDatabases
    binary formatB-treeSQL

    Go · Python · Java

  • vector-search-engine
    Coming soon

    Build your own vector search engine

    Build a vector search engine from scratch. Create a vector index with exact search, filters and a simplified HNSW graph for approximate search.

    Advanced5 stages~18 hDatabases
    vectorsapproximate searchHNSW+1

    TypeScript · Python · Go