4 个版本
新 0.1.20240823 | 2024年8月23日 |
---|---|
0.0.6 | 2024年8月23日 |
0.0.5 | 2024年8月23日 |
0.0.4 | 2024年8月23日 |
#453 在 数据库接口
每月 254 次下载
14KB
208 行
redis_rawl 是一个最小化的 Redis 客户端库实现。它暴露了一个通用的 Redis 接口。
从 redis-raw 分支 [email protected]:aminroosta/redis-raw-rs.git
分支,更新并调整。
[dependencies]
redis_rawl = "*"
基本操作
redis_rawl
暴露了两个 API 级别:低级别和更高级别!
低级别部分不暴露 Redis 的所有功能,可能在协议的表述上做一些妥协。API 的更高级别部分允许你在 Redis 级别表达任何请求。你可以在任何时刻流畅地在两个 API 级别之间切换。
连接处理
要连接到 Redis,可以使用 tokio::net::TcpStream
,它可以转换为(或从)RedisConnection
。
use redis_raw::RedisConnection;
use tokio::net::TcpStream;
#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
// stablishes a TcpStream to redis
let stream = TcpStream::connect("127.0.0.1:6379").await?;
// RedisConnection can be converted to and from TcpStream
let mut con: RedisConnection = stream.into();
// we can use the same the lower level "command" fn
con.command::<()>("set key value".to_owned()).await?;
con.command::<i64>("append key !!!".to_owned()).await?;
let value = con.command::<String>("get key".to_owned()).await?;
assert_eq!(value, "value!!!");
for i in 1..3 {
con.command::<i64>(format!("zadd myset {} {}", i, i * i)).await?;
}
let myset = con.command::<Vec<String>>("zrange myset 0 -1".to_owned()).await?;
assert_eq!(myset, vec!["1", "4"]);
Ok(())
}
执行低级别命令
要执行低级别命令,可以使用 write()
和 read()
函数,这些函数允许你发出 Redis 请求并解析 Redis(RESP)响应。这些函数对应于底层套接字的读写操作。
read()
函数将 RESP 响应解析为 redis_rawl::Value
。
Value
代表 Redis 的 RESP 协议响应。
use redis_rawl::{RedisConnection, RedisResult, Value }
fn do_something(con: &mut RedisConnection) -> RedisResult<Value> {
con.write("set key vvv").await?
con.read().await
}
执行低级别命令
低级别接口类似。command()
函数执行 write()
和 read()
,并将 Value
转换为请求的类型。
use redis_rawl::{RedisConnection, RedisResult, Value }
fn do_something(con: &mut RedisConnection) -> RedisResult<String> {
con.command::<()>("set key value".to_owned()).await?;
con.command::<i64>("append key !!!".to_owned()).await?;
con.command::<String>("get key".to_owned()).await
}
以下是一个示例,要了解正确的结果类型,请参阅 redis 文档。
use redis_rawl::{RedisConnection, RedisResult, Value }
fn do_something(con: &mut RedisConnection) -> RedisResult<Vec<String>> {
for i in 1..10 {
con.command::<i64>(format!("zadd myset {} {}", i, i*i)).await?;
}
con.command::<Vec<String>>("zrange myset 0 -1".to_owned()).await
}
以下返回类型受到支持: ()
、i64
、String
、Vec<i64>
以及 Vec<String>
依赖项
~3-11MB
~110K SLoC