# debug-boy/miniredis architecture

> Architecture diagram of the GitHub repository debug-boy/miniredis, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/debug-boy/miniredis
- Repository: https://github.com/debug-boy/miniredis

## Overview

MiniRedis is a lightweight RESP-speaking in-memory key-value server. Its principal workflow is a client request arriving over TCP or Unix sockets, being handled by the server’s event loop, parsed and executed, then returned as a RESP reply. The README also documents idle-connection cleanup, configurable dump policies, and binary persistence. The graph includes the documented optional multithreaded path; excerpts do not establish all its call sites, so those links are marked unverified. Several capability links rely on README descriptions rather than sampled implementation details.

Main entry points: [`server/src/server.cpp`](https://github.com/debug-boy/miniredis/blob/master/server/src/server.cpp) (Event loop), [`server/include/KvCommandEngine.hpp`](https://github.com/debug-boy/miniredis/blob/master/server/include/KvCommandEngine.hpp) (Command engine), [`server/include/KeyValueDumper.hpp`](https://github.com/debug-boy/miniredis/blob/master/server/include/KeyValueDumper.hpp) (Dump and load), [`server/include/Connection.hpp`](https://github.com/debug-boy/miniredis/blob/master/server/include/Connection.hpp) (Connection state)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_server["Server runtime"]
  node_eventloop["Event loop<br/>[server.cpp]"]
  node_listeners["Socket listeners<br/>[server.cpp]"]
  node_connections["Connection state<br/>[Connection.hpp]"]
  node_reaper["Idle cleanup<br/>[server.cpp]"]
  node_signals["Signal handling<br/>[server.cpp]"]
end

subgraph group_protocol["Protocol and commands"]
  node_resp["RESP parser/wrapper<br/>[Resp.hpp]"]
  node_commands["Command engine"]
end

subgraph group_state["Data and persistence"]
  node_kvstore[("In-memory KV")]
  node_dumper["Dump and load<br/>[KeyValueDumper.hpp]"]
  node_dumpfile["Binary snapshot"]
end

subgraph group_runtime["Runtime support"]
  node_config["Server configuration"]
  node_configparse["Config parser<br/>[ConfigureParse.hpp]"]
  node_eventpool["Epoll wrapper<br/>[EventPool.hpp]"]
  node_threadpool["Thread pool<br/>[ThreadPool.hpp]"]
  node_queue["Lock-free queue<br/>[LockFreeQueue.hpp]"]
end

node_client["CLI client<br/>[client.cpp]"]
node_operator(("Redis client"))

node_operator -->|"sends requests"| node_listeners
node_client -.->|"connects"| node_listeners
node_listeners -->|"registers events"| node_eventloop
node_eventloop -->|"waits for events"| node_eventpool
node_eventloop -->|"dispatches I/O"| node_connections
node_eventloop -->|"handles timer ticks"| node_reaper
node_eventloop -->|"handles signal events"| node_signals
node_connections -->|"parses buffered requests"| node_resp
node_resp -->|"produces arguments"| node_commands
node_eventloop -->|"executes queued commands"| node_commands
node_commands -->|"reads and writes"| node_kvstore
node_commands -->|"formats replies"| node_resp
node_eventloop -->|"queues replies"| node_connections
node_config -->|"loads settings"| node_configparse
node_eventloop -->|"uses runtime settings"| node_config
node_commands -->|"requests BGSAVE"| node_dumper
node_dumper -->|"serializes and restores"| node_kvstore
node_dumper -->|"writes and reads"| node_dumpfile
node_eventloop -->|"loads startup snapshot"| node_dumper
node_eventloop -.->|"checks dump policies"| node_dumper
node_eventloop -.->|"submits batch work"| node_threadpool
node_eventloop -.->|"passes pending connections"| node_queue

click node_client "https://github.com/debug-boy/miniredis/blob/master/client/src/client.cpp"
click node_eventloop "https://github.com/debug-boy/miniredis/blob/master/server/src/server.cpp"
click node_listeners "https://github.com/debug-boy/miniredis/blob/master/server/src/server.cpp"
click node_connections "https://github.com/debug-boy/miniredis/blob/master/server/include/Connection.hpp"
click node_reaper "https://github.com/debug-boy/miniredis/blob/master/server/src/server.cpp"
click node_signals "https://github.com/debug-boy/miniredis/blob/master/server/src/server.cpp"
click node_resp "https://github.com/debug-boy/miniredis/blob/master/include/common/Resp.hpp"
click node_commands "https://github.com/debug-boy/miniredis/blob/master/server/include/KvCommandEngine.hpp"
click node_kvstore "https://github.com/debug-boy/miniredis/blob/master/server/include/KvCommandEngine.hpp"
click node_dumper "https://github.com/debug-boy/miniredis/blob/master/server/include/KeyValueDumper.hpp"
click node_config "https://github.com/debug-boy/miniredis/blob/master/server/include/ServerConfigure.hpp"
click node_configparse "https://github.com/debug-boy/miniredis/blob/master/include/common/ConfigureParse.hpp"
click node_eventpool "https://github.com/debug-boy/miniredis/blob/master/include/common/EventPool.hpp"
click node_threadpool "https://github.com/debug-boy/miniredis/blob/master/include/common/ThreadPool.hpp"
click node_queue "https://github.com/debug-boy/miniredis/blob/master/include/common/LockFreeQueue.hpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_eventloop,node_listeners,node_connections,node_reaper,node_signals,node_client toneBlue
class node_resp,node_commands,node_operator toneAmber
class node_kvstore,node_dumper,node_dumpfile toneMint
class node_config,node_configparse,node_eventpool,node_threadpool,node_queue toneRose
```

## Components

### Server runtime

- [Event loop](https://github.com/debug-boy/miniredis/blob/master/server/src/server.cpp): `server/src/server.cpp`
- [Socket listeners](https://github.com/debug-boy/miniredis/blob/master/server/src/server.cpp): `server/src/server.cpp`
- [Connection state](https://github.com/debug-boy/miniredis/blob/master/server/include/Connection.hpp): `server/include/Connection.hpp`
- [Idle cleanup](https://github.com/debug-boy/miniredis/blob/master/server/src/server.cpp): `server/src/server.cpp`
- [Signal handling](https://github.com/debug-boy/miniredis/blob/master/server/src/server.cpp): `server/src/server.cpp`

### Protocol and commands

- [RESP parser/wrapper](https://github.com/debug-boy/miniredis/blob/master/include/common/Resp.hpp): `include/common/Resp.hpp`
- [Command engine](https://github.com/debug-boy/miniredis/blob/master/server/include/KvCommandEngine.hpp): `server/include/KvCommandEngine.hpp`

### Data and persistence

- [In-memory KV](https://github.com/debug-boy/miniredis/blob/master/server/include/KvCommandEngine.hpp): `server/include/KvCommandEngine.hpp`
- [Dump and load](https://github.com/debug-boy/miniredis/blob/master/server/include/KeyValueDumper.hpp): `server/include/KeyValueDumper.hpp`
- **Binary snapshot**

### Runtime support

- [Server configuration](https://github.com/debug-boy/miniredis/blob/master/server/include/ServerConfigure.hpp): `server/include/ServerConfigure.hpp`
- [Config parser](https://github.com/debug-boy/miniredis/blob/master/include/common/ConfigureParse.hpp): `include/common/ConfigureParse.hpp`
- [Epoll wrapper](https://github.com/debug-boy/miniredis/blob/master/include/common/EventPool.hpp): `include/common/EventPool.hpp`
- [Thread pool](https://github.com/debug-boy/miniredis/blob/master/include/common/ThreadPool.hpp): `include/common/ThreadPool.hpp`
- [Lock-free queue](https://github.com/debug-boy/miniredis/blob/master/include/common/LockFreeQueue.hpp): `include/common/LockFreeQueue.hpp`

### Other components

- [CLI client](https://github.com/debug-boy/miniredis/blob/master/client/src/client.cpp): `client/src/client.cpp`
- **Redis client**

## Connections

- Redis client → Socket listeners: sends requests (evidence: `README.md`)
- CLI client → Socket listeners: connects
- Socket listeners → Event loop: registers events (evidence: `server/src/server.cpp`)
- Event loop → Epoll wrapper: waits for events (evidence: `README.md`)
- Event loop → Connection state: dispatches I/O (evidence: `server/src/server.cpp`)
- Event loop → Idle cleanup: handles timer ticks (evidence: `server/src/server.cpp`)
- Event loop → Signal handling: handles signal events (evidence: `server/src/server.cpp`)
- Connection state → RESP parser/wrapper: parses buffered requests (evidence: `README.md`)
- RESP parser/wrapper → Command engine: produces arguments (evidence: `README.md`)
- Event loop → Command engine: executes queued commands (evidence: `README.md`)
- Command engine → In-memory KV: reads and writes (evidence: `server/include/KvCommandEngine.hpp`)
- Command engine → RESP parser/wrapper: formats replies (evidence: `server/include/KvCommandEngine.hpp`)
- Event loop → Connection state: queues replies (evidence: `README.md`)
- Server configuration → Config parser: loads settings (evidence: `server/include/ServerConfigure.hpp`)
- Event loop → Server configuration: uses runtime settings (evidence: `README.md`)
- Command engine → Dump and load: requests BGSAVE (evidence: `server/include/KvCommandEngine.hpp`)
- Dump and load → In-memory KV: serializes and restores (evidence: `README.md`)
- Dump and load → Binary snapshot: writes and reads (evidence: `README.md`)
- Event loop → Dump and load: loads startup snapshot (evidence: `README.md`)
- Event loop → Dump and load: checks dump policies (evidence: `server/src/server.cpp`)
- Event loop → Thread pool: submits batch work (evidence: `README.md`)
- Event loop → Lock-free queue: passes pending connections (evidence: `README.md`)
