项目链接:https://github.com/qianyuchen-git/mini-redis
1、基于resp2协议尝试实现一个基础redis,实现了原生redis 60%的功能。
2、实现了核心数据结构string, hash, list与发布订阅系统。
3、采用无共享架构与零拷贝技术,单机性能接近原生 Redis 的 85%,在保持内存安全的同时实现了高并发请求处理能力。
一 协议解析层
1、采用递归下降解析器结合 bytes crate 实现零拷贝解析,避免堆内存分配。
2、实现完整类型系统:Simple Strings、Errors、Integers、Bulk Strings、Arrays 的编解码。
3、设计流式解析器 (Streaming Parser) 处理 TCP 粘包/拆包,利用 tokio::io::AsyncBufRead 实现增量解析。
二 数据结构设计
1、String: 实现 Arc 内部化存储,配合 TTL 过期机制(基于 tokio::time::Interval 的惰性删除 + 定期清理。
2、Hash: 采用 HashMap 嵌套结构,实现 O(1) 字段级操作,支持 HINCRBY 等原子数值操作。
3、List: 基于 VecDeque 实现双端队列,支持 LPUSH/RPUSH/LRANGE 等操作,头部/尾部操作时间复杂度 O(1)。
三 高并发网络层
1、基于 tokio::net::TcpListener 实现异步多路复用。
2、使用 tokio::spawn 为每个客户端创建轻量级任务,利用 Rust 的 结构化并发确保资源生命周期安全。
3、采用 mpsc::channel 实现命令批处理队列,将多个客户端请求聚合后批量提交至存储引擎,减少锁竞争。
四 发布订阅系统
1、基于 tokio::sync::broadcast 实现多生产者多消费者 (MPMC) 消息总线。