2 个稳定版本

1.0.1 2020 年 1 月 2 日

#2038数据库接口

BSD-3-Clause 许可

17KB
220

redis-raw-rs 是一个最小的 Redis 客户端库实现。它提供了一个通用的 Redis 接口。

该包名为 redis_raw,您可以通过 cargo 依赖它。

[dependencies]
redis_raw = "*"

如果您想使用 git 版本

[dependencies]
redis_raw = { version = "*", git = "[email protected]:aminroosta/redis-raw-rs.git" }

基本操作

redis_raw 暴露了两个 API 级别:低级和更低级!
低级部分不暴露 Redis 的所有功能,并且在如何使用协议方面可能会采取一些自由度。API 的更低级部分允许您在任何级别表达任何请求。您可以在任何点流畅地在两个 API 级别之间切换。

连接处理

要连接到 Redis,您可以使用 tokio::net::TcpStream,它可以转换为 (或从) RedisConnection

use redis_raw::RedisConnection;
use tokio::net::TcpStream;

async fn do_something()
 -> std::result::Result<(), Box<dyn std::error::Error>> {

   let stream = TcpStream::connect("127.0.0.1:6379").await?;
   let mut con: RedisConnection = stream.into();

    /* do something here */

    Ok(())
}
# fn main() {}

执行更低级命令

要执行更低级命令,您可以使用 write()read() 函数,这些函数允许您发出 Redis 请求并解析 Redis (RESP) 响应。这些函数对应于底层套接字的读取和写入操作。

read() 函数将 RESP 响应解析为 redis_raw::Value
Value 表示 Redis 的 RESP 协议响应

use redis_raw::{RedisConnection, RedisResult, Value }

fn do_something(con: &mut RedisConnection) -> RedisResult<Value> {
   con.write("set key vvv\r\n").await?
   con.read().await
}

执行低级命令

低级接口类似。函数 command() 执行一个 write() 和一个 read(),并将 Value 转换为请求的类型。

use redis_raw::{RedisConnection, RedisResult, Value }

fn do_something(con: &mut RedisConnection) -> RedisResult<String> {
   con.command::<()>("set key value\r\n".to_owned()).await?;
   con.command::<i64>("append key !!!\r\n".to_owned()).await?;
   con.command::<String>("get key\r\n".to_owned()).await
}

以下是一个示例,要查看正确的结果类型,请参阅 redis 文档

use redis_raw::{RedisConnection, RedisResult, Value }

fn do_something(con: &mut RedisConnection) -> RedisResult<Vec<String>> {
   for i in 1..10 {
       con.command::<i64>(format!("zadd myset {} {}\r\n", i, i*i)).await?;
   }
   con.command::<Vec<String>>("zrange myset 0 -1\r\n".to_owned()).await
}

以下支持的返回类型包括:()i64StringVec<i64>Vec<String>

依赖项

~5.5MB
~90K SLoC