Client Redis en Rust : guide complet de la bibliothèque redis-rs

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèque redis-rs : client Rust pour Redis

\n\n

redis-rs est la bibliothèque principale, mature et la plus populaire pour travailler avec Redis depuis le langage Rust. Elle fournit une API à la fois synchrone et asynchrone (basée sur tokio ou async-std), prend en charge le clustering, les pipelines, Pub/Sub, les transactions et les scripts Lua. La bibliothèque se distingue par ses hautes performances, sa sécurité de type et son ergonomie, propres à l'écosystème Rust.

\n\n

Installation et connexion

\n\n

Ajoutez la dépendance dans Cargo.toml :

\n\n
[dependencies]\nredis = { version = "0.25", features = ["tokio-comp"] }  # pour async avec tokio\n# ou\nredis = "0.25"  # mode synchrone uniquement
\n\n

Connexion de base à Redis (version synchrone) :

\n\n
use redis::Commands;\n\nfn main() -> redis::RedisResult<()> {\n    let client = redis::Client::open("redis://127.0.0.1:6379/")?;\n    let mut con = client.get_connection()?;\n\n    // Définition et récupération d'une valeur\n    con.set("key", "value")?;\n    let val: String = con.get("key")?;\n    println!("Reçu : {}", val);\n\n    Ok(())\n}
\n\n

Fonctionnalités principales

\n\n

1. Commandes typées

\n

La bibliothèque convertit automatiquement les types Rust en types Redis et vice versa. Les chaînes, nombres, tuples, vecteurs sont pris en charge, ainsi que les types personnalisés via les traits FromRedisValue / ToRedisArgs.

\n\n
use redis::Commands;\n\nlet mut con = client.get_connection()?;\nlet count: i32 = con.incr("counter", 2)?;  // incrémentation atomique\nlet exists: bool = con.exists("nonexistent")?;\nlet members: Vec<String> = con.smembers("set_key")?;
\n\n

2. Pipelines (tuyaux)

\n

Les pipelines permettent d'envoyer plusieurs commandes en une seule requête réseau, ce qui accélère considérablement les opérations par lots.

\n\n
use redis::Pipeline;\n\nlet mut pipe = Pipeline::new();\npipe.cmd("SET").arg("a").arg(1).ignore();\npipe.cmd("SET").arg("b").arg(2).ignore();\npipe.cmd("GET").arg("a");\nlet result: i32 = pipe.query(&mut con)?;\nprintln!("Valeur de a : {}", result);
\n\n

3. Mode asynchrone (async/await)

\n

Pour les applications à forte charge, utilisez l'API asynchrone basée sur tokio ou async-std.

\n\n
use redis::AsyncCommands;\n\n#[tokio::main]\nasync fn main() -> redis::RedisResult<()> {\n    let client = redis::Client::open("redis://127.0.0.1:6379/")?;\n    let mut con = client.get_multiplexed_async_connection().await?;\n\n    con.set("async_key", "async_value").await?;\n    let val: String = con.get("async_key").await?;\n    println!("Async : {}", val);\n\n    Ok(())\n}
\n\n

4. Pub/Sub (éditeur-abonné)

\n

Implémentation du modèle Pub/Sub pour l'échange de messages en temps réel.

\n\n
use redis::{AsyncCommands, RedisResult};\n\n#[tokio::main]\nasync fn main() -> RedisResult<()> {\n    let client = redis::Client::open("redis://127.0.0.1:6379/")?;\n\n    // Abonné\n    let mut pubsub = client.get_async_connection().await?.into_pubsub();\n    pubsub.subscribe("news").await?;\n\n    loop {\n        let msg = pubsub.next_message().await?;\n        println!("Reçu : {:?}", msg.get_payload::<String>()?);\n    }\n}
\n\n

5. Transactions (MULTI/EXEC)

\n

Regroupement de commandes en une transaction atomique.

\n\n
use redis::Commands;\n\nlet mut con = client.get_connection()?;\nredis::transaction(&mut con, &["key1", "key2"], |con, pipe| {\n    pipe.cmd("SET").arg("key1").arg(42).ignore();\n    pipe.cmd("INCR").arg("key2");\n    pipe.query(con)\n})?;
\n\n

6. Clustering

\n

Pour travailler avec Redis Cluster, utilisez redis::cluster::ClusterClient :

\

Recommendations