2 个稳定版本
1.0.1 | 2020 年 1 月 2 日 |
---|
#2038 在 数据库接口
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
}
以下支持的返回类型包括:()
、i64
、String
、Vec<i64>
和Vec<String>
依赖项
~5.5MB
~90K SLoC