2 个版本

0.1.1 2024 年 5 月 20 日
0.1.0 2024 年 5 月 9 日

#500数据库接口

MIT 许可证

155KB
4K SLoC

rustdis

欢迎使用 rustdis,这是一个用 Rust 编写的 Redis 服务器部分实现。

这个项目是出于纯粹的好奇心,并且因为我们想更多地了解 Rust 和 Redis,所以做这个项目看起来是个好主意。rustdis 的主要目标是提供一个简单易懂的实现,没有任何优化技术,以确保代码易于访问和理解。到目前为止,rustdis 专注于实现 Redis 的字符串数据类型及其相关方法。您可以在以下位置找到有关 Redis 字符串的更多信息:Redis 字符串

此服务器不是生产就绪的;它纯粹是为了教育目的。

运行

cargo run

测试

cargo test

lib.rs:

Rustdis 是一个旨在教育目的的 Redis 服务器部分实现。

rustdis 的主要目标是提供一个简单易懂的实现,没有任何优化技术,以确保代码易于访问和理解。到目前为止,rustdis 专注于实现 Redis 的字符串数据类型及其相关方法。您可以在以下位置找到有关 Redis 字符串的更多信息:Redis 字符串

架构

  • server:Redis 服务器模块。提供一个启动函数,用于初始化服务器,使其能够开始处理来自 Redis 客户端的传入连接。它管理客户端请求,执行 Redis 命令,并处理连接的生命周期。

  • connection:该模块管理 Redis 客户端的 TCP 连接。它将 TCP 流分离为可读和可写组件,以方便数据的消费和传输。服务器使用此连接模块从 TCP 连接中读取数据。

  • codec:此模块负责将原始 TCP 字节流解码为 Frame 数据结构。这是将传入客户端请求转换为有意义的 Redis 命令的必要组件。

  • frame:此模块定义了Frame枚举,代表不同的Redis协议消息类型,并提供了解析和序列化功能。它遵循RESP(Redis序列化协议)规范。

  • store:此模块提供了一个简单的键值存储,用于管理Redis字符串数据类型。它支持设置、获取、删除和增加与键关联的值等基本操作。


                        +--------------------------------------+
                        |             Redis Client             |
                        +-------------------+------------------+
                                            |
                                            | Request (e.g., SET key value)
                                            v
                        +-------------------+------------------+
                        |                  Server              |
                        |    (module: server, function: run)   |
                        +-------------------+------------------+
                                            |
                                            | Accept Connection
                                            v
                        +-------------------+------------------+
                        |                Connection            |
                        |   (module: connection, manages TCP   |
                        |        connections and streams)      |
                        +-------------------+------------------+
                                            |
                                            | Read Data from TCP Stream
                                            v
                        +-------------------+------------------+
                        |                   Codec              |
                        |  (module: codec, function: decode)   |
                        +-------------------+------------------+
                                            |
                                            | Decode Request
                                            v
                        +-------------------+------------------+
                        |                   Frame              |
                        |  (module: frame, function: parse)    |
                        +-------------------+------------------+
                                            |
                                            | Parse Command and Data
                                            v
                        +-------------------+------------------+
                        |                   Store              |
                        |  (module: store, manages key-value   |
                        |          data storage)               |
                        +-------------------+------------------+
                                            |
                                            | Execute Command (e.g., set, get, incr_by)
                                            v
                        +-------------------+------------------+
                        |                   Frame              |
                        |  (module: frame, function: serialize)|
                        +-------------------+------------------+
                                            |
                                            | Encode Response
                                            v
                        +-------------------+------------------+
                        |                   Codec              |
                        |  (module: codec, function: encode)   |
                        +-------------------+------------------+
                                            |
                                            | Write Data to TCP Stream
                                            v
                        +-------------------+------------------+
                        |                Connection            |
                        |   (module: connection, manages TCP   |
                        |        connections and streams)      |
                        +-------------------+------------------+
                                            |
                                            | Send Response
                                            v
                        +-------------------+------------------+
                        |             Redis Client             |
                        +--------------------------------------+

依赖项

~5–12MB
~123K SLoC