使用如下命令在合适的文件夹下新建一个rust项目。

    1. cargo new redis-cli

    此时进入redis-cli的文件夹中,在cargo.html的文件中添加我们会用到的库。现在主要是三个,一个是async-std,异步运行时库。一个是nom,数据解析库。一个是bytes。写入之后的文件如下。
    Cargo.html

    1. [dependencies.async-std]
    2. version = "1.6.5"
    3. features = ["attributes"]
    4. //异步运行时支持
    5. [dependencies]
    6. nom = "5" //数据解析库
    7. bytes = "0.6" //字节处理

    添加好依赖后,我们在终端使用cargo run命令,编译项目,并下载所需要的库文件。最终我们可以看到终端界面上输出了hello,world!,说明项目已经搭建成功。
    在项目搭建成功之后,我们写一段程序,来验证和redis服务器的链接。redis服务器的安装请自行百度。
    在main.rs中写入如下代码,然后运行。

    1. use async_std::net::TcpStream;
    2. use async_std::prelude::*;
    3. use bytes::{BufMut, BytesMut};
    4. use std::error::Error;
    5. #[async_std::main]
    6. async fn main() -> Result<(), Box<dyn Error>> {
    7. let stream = TcpStream::connect("127.0.0.1:6379").await?;
    8. let mut buf = [0u8; 1024];
    9. let mut resp = BytesMut::with_capacity(1024);
    10. let (mut reader, mut writer) = (&stream, &stream);
    11. // 向服务器发送 PING
    12. writer.write(b"*1\r\n$4\r\nPING\r\n").await?;
    13. let n = reader.read(&mut buf).await?;
    14. resp.put(&buf[0..n]);
    15. // 返回结果应该是 PONG
    16. println!("{:?}", resp);
    17. Ok(())
    18. }

    上面代码中,第8行,链接redis服务器,第12行,对stream进行分割,分为read和write两部分。然后在第14行写入了PING字符数组。第15行到18行读取了redis服务器的回复,并打印在终端上,如果成功,可以看到终端上有着下面的文本。

    1. b"+PONG\r\n"

    当看到上述文本的时候,我们的程序已经成功了,我们向redis服务器发送了一个请求,然后获取了redis服务器的回复。这是一个redis客户端最简单、也是最核心的要求。完成这个,最基础的流程便走通了。在项目架构图上,我们完成了和redis服务器的交互。后面我们请求和回复到字符串格式的转换。