1 个不稳定版本

0.21.6 2022年3月1日
0.21.5 2022年3月1日

#1104数据库接口

BSD-3-Clause

390KB
7.5K SLoC

redis-rs

Build Status crates.io

redis-rs 是一个为 Rust 编写的 Redis 库。它通过一个非常灵活但底层的 API 提供对 Redis 所有功能的便捷访问。它使用可定制的类型转换特性,使得任何操作都可以返回你期望的类型的结果。这使得开发体验非常愉快。

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

[dependencies]
mco-redis-rs = "0.21.5"

有关该库的文档可以在 docs.rs/redis 找到。

注意:redis-rs 需要 Rust 1.39 或更高版本。

基本操作

要打开连接,您需要创建一个客户端,然后从它那里获取连接。将来将为这些操作提供连接池,目前每个连接都是独立的,不进行池化。

许多命令通过 Commands 特性实现,但也可以手动创建命令。

extern crate mco_redis_rs as redis;
use redis::Commands;

fn fetch_an_integer() -> redis::RedisResult<isize> {
    // connect to redis
    let client = redis::Client::open("redis://127.0.0.1/")?;
    let mut con = client.get_connection()?;
    // throw away the result, just make sure it does not fail
    let _ : () = con.set("my_key", 42)?;
    // read back the key and return it.  Because the return value
    // from the function is a result for integer this will automatically
    // convert into one.
    con.get("my_key")
}

异步支持

要启用异步客户端,需要激活底层特性的功能。

# if you use tokio
mco-redis-rs = { version = "0.17.0", features = ["tokio-comp"] }

# if you use async-std
mco-redis-rs = { version = "0.17.0", features = ["async-std-comp"] }

TLS 支持

要启用 TLS 支持,您需要在 Cargo.toml 中使用相关的功能条目。

mco-redis-rs = { version = "0.19.0", features = ["tls"] }

# if you use tokio
mco-redis-rs = { version = "0.19.0", features = ["tokio-native-tls-comp"] }

# if you use async-std
mco-redis-rs = { version = "0.19.0", features = ["async-std-tls-comp"] }

然后您应该能够使用 rediss:// URL 方案连接到 Redis 实例。

let client = redis::Client::open("rediss://127.0.0.1/")?;

集群支持

您可以通过在 Cargo.toml 中将 "cluster" 作为功能条目来使用集群模式。

mco-redis-rs= {版本= "0.17.0",功能= [ "cluster"] }

然后您可以简单地使用 ClusterClient,它接受可用节点的列表。

use redis::cluster::ClusterClient;
use redis::Commands;

fn fetch_an_integer() -> String {
    // connect to redis
    let nodes = vec!["redis://127.0.0.1/"];
    let client = ClusterClient::open(nodes).unwrap();
    let mut connection = client.get_connection().unwrap();
    let _: () = connection.set("test", "test_data").unwrap();
    let rv: String = connection.get("test").unwrap();
    return rv;
}

开发

如果您想为该库开发,makefile 提供了一些命令。

构建

$ make

测试

$ make test

运行基准测试

$ make bench

构建文档(需要 nightly 编译器,请参阅 rust-lang/rust#43781

$ make docs

我们鼓励您在提交工作之前运行 clippy。这些 lint 非常严格。在您的个人工作站上运行它可以节省您的时间,因为 Travis CI 会失败任何不满足 clippy 的构建。

$ cargo clippy --all-features --all --tests --examples -- -D clippy::all -D warnings

要使用afl运行模糊测试,首先安装cargo-afl(使用以下命令:cargo install -f afl),然后运行

$ make fuzz

如果模糊器发现崩溃,为了重现它,运行

$ cd afl/<target>/
$ cargo run --bin reproduce -- out/crashes/<crashfile>

依赖项

~6–38MB
~618K SLoC