Rust + Protobuf:从零打造高效键值存储项目

Rust + Protobuf:从零打造高效键值存储项目

Rust 以其卓越的性能、内存安全和并发能力席卷开发圈,Protobuf 则以高效的序列化能力成为现代系统开发的利器。本文将带你通过一个简单却实用的键值存储(Key-Value Store)项目,结合 Rust 和 Protobuf,从零开始探索高效系统开发的魅力。无论你是 Rust 新手,还是想掌握 Protobuf 在实际项目中的应用,这篇教程都将为你提供清晰的步骤和实操经验,助你快速上手,解锁 Rust 开发的无限可能!

本文通过一个键值存储项目的完整开发流程,详细讲解如何使用 Rust 和 Protobuf 构建高效应用。从项目初始化、配置 Cargo 依赖、定义 Protobuf 协议文件,到编写构建脚本和核心逻辑,教程步步拆解,代码清晰易懂。借助 prost 库处理 Protobuf 序列化,我们展示了 Rust 的强大性能与 Protobuf 的高效数据传输能力。无论你是初学者还是进阶开发者,都能通过本文快速掌握 Rust 项目开发和 Protobuf 集成的核心技巧。

实操

创建项目

arduino 复制代码
cargo new kv

切换到项目目录

bash 复制代码
cd kv

用 vscode 打开项目

r 复制代码
c # code .

创建 build.rs 文件

bash 复制代码
touch build.rs

编译构建项目

复制代码
cargo build

运行项目

arduino 复制代码
cargo run

查看项目目录

csharp 复制代码
kv on  master [?] is 📦 0.1.0 via 🦀 1.87.0 via 🅒 base 
➜ tree -a -I "target|.git"
.
├── .gitignore
├── .vscode
│   └── settings.json
├── Cargo.lock
├── Cargo.toml
├── abi.proto
├── build.rs
└── src
    ├── main.rs
    └── pb
        ├── abi.rs
        └── mod.rs
​
4 directories, 9 files
​

Cargo.toml 文件

ini 复制代码
[package]
name = "kv"
version = "0.1.0"
edition = "2024"
​
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
​
[dependencies]
tokio = "1.29.1"
prost = "0.11.9"
# Only necessary if using Protobuf well-known types:
prost-types = "0.11.9"
​
[build-dependencies]
prost-build = "0.11.9"
​

abi.proto 文件

ini 复制代码
syntax = "proto3";
​
package abi;
​
message Request {
    oneof message {
        RequestGet get = 1;
        RequestPut put = 2;
    }
}
​
message Response {
    uint32 code = 1;
    string Key = 2;
    string value = 3;
}
​
message RequestGet {
    string Key = 1;
}
​
message RequestPut {
    string Key = 1;
    bytes value = 2;
}
​

build.rs 文件

css 复制代码
fn main() {
    prost_build::Config::new()
        .out_dir("src/pb")
        .compile_protos(&["abi.proto"], &["."])
        .unwrap();
}
​

src/pb/mod.rs 文件

rust 复制代码
mod abi;
pub use abi::*;
​

src/main.rs 文件

rust 复制代码
mod pb;
​
use prost::Message;
​
use crate::pb::RequestGet;
​
fn main() {
    let request = RequestGet {
        key: "hello".to_string(),
    };
    let mut buf = Vec::new();
    request.encode(&mut buf).unwrap();
    println!("encoded: {:?}", buf);
}
​

编译运行项目

scss 复制代码
kv on  master [?] is 📦 0.1.0 via 🦀 1.71.0 via 🅒 base took 3.6s 
➜ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/kv`
encoded: [10, 5, 104, 101, 108, 108, 111]
​

总结

通过本教程,你已成功用 Rust 和 Protobuf 打造了一个高效的键值存储项目。从 cargo new 初始化到 Protobuf 文件的定义,再到编码、编译和运行,我们完整走通了 Rust 开发的典型流程,体验了 Protobuf 在数据序列化中的便捷与高效。这个项目不仅让你熟悉了 Rust 的项目结构和生态工具,还为进一步探索异步编程、网络服务等高级主题打下坚实基础。赶快动手实践,结合文末参考资源,深入 Rust 和 Protobuf 的世界,开启你的高效开发之旅!

参考

相关推荐
牛奔1 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌6 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
passerby60617 小时前
完成前端时间处理的另一块版图
前端·github·web components
KYGALYX7 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了7 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法8 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment8 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
草梅友仁9 小时前
墨梅博客 1.4.0 发布与开源动态 | 2026 年第 6 周草梅周报
开源·github·ai编程
Cobyte9 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
程序员侠客行10 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis