Rust (redis-rs)

Using FyroDB with Rust and the redis crate.

Add Dependency

[dependencies]
redis = "0.25"

Basic Usage

use redis::Commands;
 
fn main() -> redis::RedisResult<()> {
    let client = redis::Client::open("redis://127.0.0.1:8000/")?;
    let mut con = client.get_connection()?;
 
    con.set("user:1", "Rana")?;
    let val: String = con.get("user:1")?;
    println!("{val}"); // "Rana"
 
    con.set_ex("session:token", "abc123", 3600)?;
 
    let _: i64 = con.incr("page:views", 1)?;
 
    con.hset_multiple("product:1", &[
        ("name", "Widget"),
        ("price", "9.99"),
        ("stock", "100"),
    ])?;
    let product: Vec<(String, String)> = con.hgetall("product:1")?;
    println!("{product:?}");
 
    Ok(())
}

Pipelining

let mut pipe = redis::pipe();
for i in 0..1000 {
    pipe.set(format!("key:{i}"), format!("value:{i}"));
}
pipe.query::<()>(&mut con)?;

Pub/Sub

let mut pubsub = con.as_pubsub();
pubsub.subscribe("events")?;
 
loop {
    let msg = pubsub.get_message()?;
    let payload: String = msg.get_payload()?;
    println!("Received: {payload}");
}

Async (tokio)

use redis::AsyncCommands;
 
#[tokio::main]
async fn main() -> redis::RedisResult<()> {
    let client = redis::Client::open("redis://127.0.0.1:8000/")?;
    let mut con = client.get_multiplexed_async_connection().await?;
 
    con.set("key", "value").await?;
    let val: String = con.get("key").await?;
    println!("{val}");
 
    Ok(())
}