2 个版本
0.1.1 | 2024 年 5 月 20 日 |
---|---|
0.1.0 | 2024 年 5 月 9 日 |
#500 在 数据库接口 中
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