Loading...
Loading...
Six standalone free courses. Each rebuilds Redis from scratch in idiomatic Python, Go, Node.js, Rust, Ruby, or Elixir. Same architecture, different runtimes. Every line lives in your own GitHub.
Each course follows the same ten-step architectural progression. The architectural lessons (RESP framing, atomic writes, fan-out, graceful lifecycle) transfer 1:1 across runtimes. The idioms differ.
Module 01
One listener, one task per connection. Multi-client from day one.
Module 02
Wire format with the language's native sum-type story.
Module 03
Shared map plus the language's idiomatic concurrency primitive.
Module 04
Time-based TTLs with lazy delete. Monotonic clocks where available.
Module 05
Append-only log with crash-safe replay.
Module 06
Atomic file rename. Clone-under-lock instead of fork.
Module 07
Fan-out via channels, queues, broadcast, or Registry.
Module 08
Master and replica over the same RESP wire your clients speak.
Module 09
Signal handlers, drain in-flight work, persist before exit.
Module 10
p50/p95/p99 latency comparison vs real Redis.
Taught by Param. Every line ends up in your own GitHub. Same architecture across all six runtimes, verified against real Redis on p50, p95, and p99 latency.
Each course is free, self-contained, and ships with a public workshop repo on GitHub. Start with the one you know; finish with one you do not.
Reference language. Threads, selectors, dict + lock, dataclasses for the RESP sum type.
Idiom: Threads + selectors
Goroutines, sync.RWMutex, channel-based pub/sub, context.Context graceful shutdown.
Idiom: Goroutines + channels
Single-threaded event loop. net.createServer, Buffer cursor, Map without locks.
Idiom: Event loop + Map
Async tokio, enum sum types, Arc<Mutex<HashMap>>, broadcast channels, watch shutdown.
Idiom: tokio tasks + enum
TCPServer + Thread per conn, Queue + write-pump for pub/sub, Signal.trap shutdown.
Idiom: Threads + Queue
Process per conn, binary pattern matching, Registry pub/sub, OTP terminate/2 shutdown.
Idiom: Process + Registry
Same architecture across all six. The constant factors differ. Real Redis (hand-tuned C) is the throughput target; each language closes a different fraction of the gap with idiomatic code.
| Concept | Python | Go | Node | Rust | Ruby | Elixir |
|---|---|---|---|---|---|---|
| Concurrency | Threads / selectors | Goroutines | Event loop | tokio tasks | Threads / Fibers | Processes |
| Shared state | dict + lock | RWMutex | Map (no lock) | Arc<Mutex<..>> | Hash + Mutex | GenServer state |
| Pub/Sub fan-out | List + lock | Buffered chan | Set<conn> | broadcast channel | Queue per sub | Registry + send/2 |
| Sum type | duck typing | interface{} | discriminated objects | enum | tagged array | tagged tuple |
| Typical throughput | 10-50k ops/s | 40-100k | 20-60k | 50-150k | 10-30k | 30-100k |