# MiniKVGit **Repository Path**: kukulyp/mini-kvgit ## Basic Information - **Project Name**: MiniKVGit - **Description**: 基于C++实现的mini数据库 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-15 - **Last Updated**: 2026-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MiniRedis 轻量级内存键值存储系统,基于 C++17 从零实现的简化版 Redis。 ## 项目结构 ``` MyLeveLowprog/ ├── server/ # MiniRedis 服务端(Linux / 跨平台) │ ├── CMakeLists.txt │ └── src/ │ ├── main.cpp # 入口:组装各模块、启动服务器 │ ├── server.h/cpp # 网络层:epoll 事件循环、TCP 收发 │ ├── store.h/cpp # 存储层:内存 KV 存储(unordered_map) │ └── persistence.h/cpp # 持久化层:AOF 文件读写 │ ├── client/ # Qt6 图形客户端(Windows / 跨平台) │ ├── CMakeLists.txt │ ├── mainwindow.ui # Qt Designer 拖出来的界面布局 │ ├── main.cpp # 入口 │ ├── mainwindow.h/cpp # 主窗口逻辑:连接、发送、接收、命令历史 │ ├── README.md └── .gitignore ``` ## 技术栈 | 技术 | 用途 | |------|------| | C++17 | 核心语言标准 | | Linux epoll | 多客户端并发网络模型 | | Qt6 (Widgets + Network) | 跨平台图形界面 + TCP 客户端 | | SQLite(预留)| AOF 持久化底层存储集成 | | RESP 协议 | 客户端-服务端通信协议 | | CMake | 跨平台构建系统 | ## 功能特性 ### 服务端 - 基于 epoll 的事件驱动并发模型,单线程处理多客户端 - 支持 PING / SET / GET / DEL 命令 - 行缓冲区解决 TCP 粘包问题 - AOF(Append-Only File)持久化,启动时自动重放恢复数据 - 完整的错误处理和参数校验 ### 客户端 - 支持输入 Host、Port 连接指定服务器 - 命令输入框 + 发送按钮,支持回车键发送 - 服务端响应结果显示在只读文本区域 - 命令历史功能(↑/↓ 键翻看历史命令) - 连接状态管理(连接/断开按钮互斥) - RESP 协议响应格式化显示 ## 快速开始 ### 1. 启动服务端 在 Linux 环境(或 WSL / 虚拟机)中编译运行: ```bash cd server mkdir build && cd build cmake .. make ./miniredis_server ``` 服务端默认监听 `0.0.0.0:6379`。 ### 2. 启动客户端 在 Windows 上用 Qt Creator 打开 `D:\myprogram\MyLeveLowprog\client\CMakeLists.txt`,配置后运行。 或命令行编译(需提前配置 Qt6 环境变量): ```bash cd client/build/Desktop_Qt_6_11_1_MinGW_64_bit-Debug D:\Qt\Tools\CMake_64\bin\cmake.exe --build . .\miniredis_client.exe ``` ### 3. 测试连接 ```bash # 也可以直接用 telnet 测试服务器 telnet 127.0.0.1 6379 ``` 客户端或 telnet 输入命令: ``` PING → +PONG SET name 张三 → +OK GET name → $6\r\n张三\r\n GET nonexit → $-1(空值) DEL name → :1(已删除) ``` ## 架构设计 ### 分层架构 ``` main.cpp(组装层) │ ├── Server(网络层:socket → epoll → 命令分发) │ │ │ ▼ ├── Store(业务层:内存哈希表读写) │ │ │ ▼ └── Persistence(持久化层:AOF 文件追加 + 重放) ``` 每层只依赖下层,不依赖上层,符合**单向依赖**原则。 ### 核心流程 ``` 客户端 → TCP 连接 → epoll 检测事件 → Server::handleClient() → 行缓冲区拆包 → 命令判断 → Store::set/get/del() → Persistence::append()(写操作时触发) → send() 回复客户端 服务端重启 → Persistence::replay() → 重新执行历史命令 → 恢复 Store ``` ### 数据流 ``` SET name 张三 store["name"] = "张三" # 写入内存 append("SET name 张三\n") # 追加到 AOF 文件 服务器重启 replay("SET name 张三", ...) # 读 AOF 文件 store["name"] = "张三" # 恢复到内存 ``` ## 项目状态 已完成。代码量约 810 行(不含 Qt 自动生成代码),功能完整的 C/S 架构 KV 存储系统。 ### 可能的扩展方向 - KEYS 命令(列出所有 key) - 过期时间(TTL)支持 - AOF rewrite(防止文件无限增长) - RDB 快照持久化 - 更多数据结构(List、Set、Hash) - 客户端命令补全 / 自动提示