Redis-rs is a high level redis library for Rust. It provides convenient access to all Redis functionality through a very flexible but low-level API. It uses a customizable type conversion trait so that any operation can return results in just the type you are expecting. This makes for a very pleasant development experience.
The crate is called redis
and you can depend on it via cargo:
[dependencies]
redis = "0.16.0"
Documentation on the library can be found at docs.rs/redis.
Note: redis-rs requires at least Rust 1.39.
To open a connection you need to create a client and then to fetch a connection from it. In the future there will be a connection pool for those, currently each connection is separate and not pooled.
Many commands are implemented through the Commands
trait but manual
command creation is also possible.
extern crate 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")
}
Cluster mode can be used by specifying "cluster" as a features entry in your Cargo.toml.
redis = { version = "0.16.0", features = [ "cluster"] }
Then you can simply use the ClusterClient
which accepts a list of available nodes.
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;
}
If you want to develop on the library there are a few commands provided by the makefile:
To build:
$ make
To test:
$ make test
To run benchmarks:
$ make bench
To build the docs:
$ make docs
To run fuzz tests with afl, first install cargo-afl (cargo install -f afl
),
then run:
$ make fuzz
If the fuzzer finds a crash, in order to reproduce it, run:
$ cd afl/<target>/
$ cargo run --bin reproduce -- out/crashes/<crashfile>