使用如下命令在合适的文件夹下新建一个rust项目。
cargo new redis-cli
此时进入redis-cli的文件夹中,在cargo.html的文件中添加我们会用到的库。现在主要是三个,一个是async-std,异步运行时库。一个是nom,数据解析库。一个是bytes。写入之后的文件如下。
Cargo.html
[dependencies.async-std]
version = "1.6.5"
features = ["attributes"]
//异步运行时支持
[dependencies]
nom = "5" //数据解析库
bytes = "0.6" //字节处理
添加好依赖后,我们在终端使用cargo run命令,编译项目,并下载所需要的库文件。最终我们可以看到终端界面上输出了hello,world!,说明项目已经搭建成功。
在项目搭建成功之后,我们写一段程序,来验证和redis服务器的链接。redis服务器的安装请自行百度。
在main.rs中写入如下代码,然后运行。
use async_std::net::TcpStream;
use async_std::prelude::*;
use bytes::{BufMut, BytesMut};
use std::error::Error;
#[async_std::main]
async fn main() -> Result<(), Box<dyn Error>> {
let stream = TcpStream::connect("127.0.0.1:6379").await?;
let mut buf = [0u8; 1024];
let mut resp = BytesMut::with_capacity(1024);
let (mut reader, mut writer) = (&stream, &stream);
// 向服务器发送 PING
writer.write(b"*1\r\n$4\r\nPING\r\n").await?;
let n = reader.read(&mut buf).await?;
resp.put(&buf[0..n]);
// 返回结果应该是 PONG
println!("{:?}", resp);
Ok(())
}
上面代码中,第8行,链接redis服务器,第12行,对stream进行分割,分为read和write两部分。然后在第14行写入了PING字符数组。第15行到18行读取了redis服务器的回复,并打印在终端上,如果成功,可以看到终端上有着下面的文本。
b"+PONG\r\n"
当看到上述文本的时候,我们的程序已经成功了,我们向redis服务器发送了一个请求,然后获取了redis服务器的回复。这是一个redis客户端最简单、也是最核心的要求。完成这个,最基础的流程便走通了。在项目架构图上,我们完成了和redis服务器的交互。后面我们请求和回复到字符串格式的转换。