rustis 0.12.5

Redis async driver for Rust
Documentation
An asynchronous Redis client for Rust.


[![Crate](https://img.shields.io/crates/v/rustis.svg)](https://crates.io/crates/rustis)
[![docs.rs](https://docs.rs/rustis/badge.svg)](https://docs.rs/rustis)
[![Build](https://github.com/dahomey-technologies/rustis/actions/workflows/compile_and_test.yml/badge.svg)](https://github.com/dahomey-technologies/rustis/actions/workflows/compile_and_test.yml)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

# Documentation
[Official Documentation](https://docs.rs/rustis/latest/rustis/)

# Philosophy
* Low allocations
* Full async library
* Lock free implementation
* Rust idiomatic API
* Multiplexing as a core feature

# Features
* Full documentation with multiple examples
* Support all [Redis Commands]https://redis.io/commands/ until Redis 7.0
* Async support ([tokio]https://tokio.rs/ or [async-std]https://async.rs/)
* Different client modes:
  * Single client
  * [Multiplexed]https://redis.com/blog/multiplexing-explained/ client
  * Pooled client manager (based on [bb8]https://docs.rs/bb8/latest/bb8/)
* Automatic command batching
* Advanced reconnection & retry strategy
* [Pipelining]https://redis.io/docs/manual/pipelining/ support
* Configuration with Redis URL or dedicated builder
* [TLS]https://redis.io/docs/manual/security/encryption/ support
* [Transaction]https://redis.io/docs/manual/transactions/ support
* [Pub/sub]https://redis.io/docs/manual/pubsub/ support
* [Sentinel]https://redis.io/docs/manual/sentinel/ support
* [LUA Scripts/Functions]https://redis.io/docs/manual/programmability/ support
* [Cluster]https://redis.io/docs/manual/scaling/ support (minimus supported Redis version is 6)
* [Redis Stack]https://redis.io/docs/stack/ support:
  * [RedisJSON v2.4]https://redis.io/docs/stack/json/ support
  * [RedisSearch v2.6]https://redis.io/docs/stack/search/ support
  * [RedisGraph v2.10]https://redis.io/docs/stack/graph/ support
  * [RedisBloom v2.4]https://redis.io/docs/stack/bloom/ support
  * [RedisTimeSeries v1.8]https://redis.io/docs/stack/timeseries/ support

# Basic Usage

```rust
use rustis::{
     client::Client, 
     commands::{FlushingMode, ServerCommands, StringCommands},
     Result,
};

#[tokio::main]
async fn main() -> Result<()> {
     // Connect the client to a Redis server from its IP and port
     let client = Client::connect("127.0.0.1:6379").await?;
 
     // Flush all existing data in Redis
     client.flushdb(FlushingMode::Sync).await?;

     // sends the command SET to Redis. This command is defined in the StringCommands trait
     client.set("key", "value").await?;
 
     // sends the command GET to Redis. This command is defined in the StringCommands trait
     let value: String = client.get("key").await?;
     println!("value: {value:?}");

     Ok(())
}
```

# Tests

1. From the `redis` directory, run `docker_up.sh` or `docker_up.cmd`
2. run `cargo test --features pool,redis-stack,tokio-tls` (Tokio runtime)
3. run `cargo test --no-default-features --features redis-stack,async-std-runtime,async-std-tls` (async-std runtime)

# Benchmarks
1. From the `redis` directory, run `docker_up.sh` or `docker_up.cmd`
2. run `cargo bench`