Redis-Client in Rust: Vollständige Anleitung zur Arbeit mit der Bibliothek redis-rs

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Bibliothek redis-rs: Rust-Client für Redis

\n\n

redis-rs ist die wichtigste, ausgereifte und beliebteste Bibliothek für die Arbeit mit Redis aus der Sprache Rust. Sie bietet sowohl eine synchrone als auch eine asynchrone (basierend auf tokio oder async-std) API, unterstützt Clustering, Pipelines, Pub/Sub, Transaktionen und Lua-Skripte. Die Bibliothek zeichnet sich durch hohe Leistung, Typsicherheit und Ergonomie aus, die dem Rust-Ökosystem eigen sind.

\n\n

Installation und Verbindung

\n\n

Fügen Sie die Abhängigkeit in Cargo.toml hinzu:

\n\n
[dependencies]\nredis = { version = "0.25", features = ["tokio-comp"] }  # für async mit tokio\n# oder\nredis = "0.25"  # nur synchroner Modus
\n\n

Basisverbindung zu Redis (synchrone Variante):

\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    // Setzen und Abrufen eines Wertes\n    con.set("key", "value")?;\n    let val: String = con.get("key")?;\n    println!("Erhalten: {}", val);\n\n    Ok(())\n}
\n\n

Hauptfunktionen

\n\n

1. Typisierte Befehle

\n

Die Bibliothek konvertiert automatisch Rust-Typen in Redis-Typen und umgekehrt. Unterstützt werden Strings, Zahlen, Tupel, Vektoren sowie benutzerdefinierte Typen über die Traits FromRedisValue / ToRedisArgs.

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

2. Pipelines

\n

Pipelines ermöglichen das Senden mehrerer Befehle in einer einzigen Netzwerkanfrage, was Batch-Operationen erheblich beschleunigt.

\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!("Wert a: {}", result);
\n\n

3. Asynchroner Modus (async/await)

\n

Für stark ausgelastete Anwendungen verwenden Sie die asynchrone API basierend auf tokio oder 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 (Publisher/Subscriber)

\n

Implementierung des Pub/Sub-Musters für den Nachrichtenaustausch in Echtzeit.

\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    // Subscriber\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!("Erhalten: {:?}", msg.get_payload::<String>()?);\n    }\n}
\n\n

5. Transaktionen (MULTI/EXEC)

\n

Gruppierung von Befehlen in einer atomaren Transaktion.

\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

Für die Arbeit mit Redis Cluster verwenden Sie redis::cluster::ClusterClient:

\n\

Empfehlungen