# retry33/mini-redis architecture

> Architecture diagram of the GitHub repository retry33/mini-redis, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/retry33/mini-redis
- Repository: https://github.com/retry33/mini-redis

## Overview

mini-redis is a small C++ TCP server, but the sampled entry point installs an echo handler rather than Redis command or storage behavior. Its runtime flow is: start the server with a listening endpoint and handler, poll for events, accept connections, process input through the handler, and queue responses for writing. The graph includes the socket and descriptor abstractions. Several implementation files are indexed but not excerpted, so uncertain lower-level wiring is omitted.

Main entry points: [`src/server/server.cpp`](https://github.com/retry33/mini-redis/blob/main/src/server/server.cpp) (Server Loop), [`src/main.cpp`](https://github.com/retry33/mini-redis/blob/main/src/main.cpp) (Echo Entry), [`src/server/connection.cpp`](https://github.com/retry33/mini-redis/blob/main/src/server/connection.cpp) (Connection Buffers), [`src/server/poller.cpp`](https://github.com/retry33/mini-redis/blob/main/src/server/poller.cpp) (Event Poller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application"]
  node_main["Echo Entry<br/>[main.cpp]"]
  node_handler["Handler Contract<br/>[handler.hpp]"]
end

subgraph group_server["Event Server"]
  node_server["Server Loop<br/>[server.cpp]"]
  node_acceptor["Connection Acceptor<br/>[acceptor.cpp]"]
  node_connection["Connection Buffers<br/>[connection.cpp]"]
  node_poller["Event Poller<br/>[poller.cpp]"]
end

subgraph group_transport["Network Primitives"]
  node_endpoint["Listen Endpoint<br/>[endpoint.cpp]"]
  node_socket["Socket Wrapper<br/>[socket.cpp]"]
  node_fd["Descriptor RAII"]
end

node_client(("TCP Client"))

node_main -->|"creates"| node_endpoint
node_main -->|"defines callback"| node_handler
node_main -->|"starts"| node_server
node_client -.->|"exchanges TCP data"| node_server
node_server -->|"accepts connections"| node_acceptor
node_server -->|"waits for events"| node_poller
node_server -->|"handles socket events"| node_connection
node_server -->|"invokes callback"| node_handler
node_connection -->|"reads and writes"| node_socket
node_poller -->|"owns epoll descriptor"| node_fd
node_socket -->|"owns descriptor"| node_fd

click node_main "https://github.com/retry33/mini-redis/blob/main/src/main.cpp"
click node_handler "https://github.com/retry33/mini-redis/blob/main/src/server/handler.hpp"
click node_server "https://github.com/retry33/mini-redis/blob/main/src/server/server.cpp"
click node_acceptor "https://github.com/retry33/mini-redis/blob/main/src/server/acceptor.cpp"
click node_connection "https://github.com/retry33/mini-redis/blob/main/src/server/connection.cpp"
click node_poller "https://github.com/retry33/mini-redis/blob/main/src/server/poller.cpp"
click node_endpoint "https://github.com/retry33/mini-redis/blob/main/src/server/endpoint.cpp"
click node_socket "https://github.com/retry33/mini-redis/blob/main/src/server/socket.cpp"
click node_fd "https://github.com/retry33/mini-redis/blob/main/src/server/file_descriptor.cpp"

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_main,node_handler,node_client toneBlue
class node_server,node_acceptor,node_connection,node_poller toneAmber
class node_endpoint,node_socket,node_fd toneMint
```

## Components

### Application

- [Echo Entry](https://github.com/retry33/mini-redis/blob/main/src/main.cpp): `src/main.cpp`
- [Handler Contract](https://github.com/retry33/mini-redis/blob/main/src/server/handler.hpp): `src/server/handler.hpp`

### Event Server

- [Server Loop](https://github.com/retry33/mini-redis/blob/main/src/server/server.cpp): `src/server/server.cpp`
- [Connection Acceptor](https://github.com/retry33/mini-redis/blob/main/src/server/acceptor.cpp): `src/server/acceptor.cpp`
- [Connection Buffers](https://github.com/retry33/mini-redis/blob/main/src/server/connection.cpp): `src/server/connection.cpp`
- [Event Poller](https://github.com/retry33/mini-redis/blob/main/src/server/poller.cpp): `src/server/poller.cpp`

### Network Primitives

- [Listen Endpoint](https://github.com/retry33/mini-redis/blob/main/src/server/endpoint.cpp): `src/server/endpoint.cpp`
- [Socket Wrapper](https://github.com/retry33/mini-redis/blob/main/src/server/socket.cpp): `src/server/socket.cpp`
- [Descriptor RAII](https://github.com/retry33/mini-redis/blob/main/src/server/file_descriptor.cpp): `src/server/file_descriptor.cpp`

### Other components

- **TCP Client**

## Connections

- Echo Entry → Listen Endpoint: creates (evidence: `src/main.cpp`)
- Echo Entry → Handler Contract: defines callback (evidence: `src/main.cpp`)
- Echo Entry → Server Loop: starts (evidence: `src/main.cpp`)
- TCP Client → Server Loop: exchanges TCP data
- Server Loop → Connection Acceptor: accepts connections (evidence: `src/server/server.cpp`)
- Server Loop → Event Poller: waits for events (evidence: `src/server/server.cpp`)
- Server Loop → Connection Buffers: handles socket events (evidence: `src/server/server.cpp`)
- Server Loop → Handler Contract: invokes callback (evidence: `src/server/server.cpp`)
- Connection Buffers → Socket Wrapper: reads and writes (evidence: `src/server/connection.cpp`)
- Event Poller → Descriptor RAII: owns epoll descriptor
- Socket Wrapper → Descriptor RAII: owns descriptor
