Rust 上的 Redis 客户端:redis-rs 库完全指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

redis-rs 库:用于 Redis 的 Rust 客户端



redis-rs 是一个成熟且最流行的 Rust 语言 Redis 操作库。它提供同步和异步(基于 tokio 或 async-std)API,支持集群、管道、发布/订阅、事务和 Lua 脚本。该库具有 Rust 生态系统特有的高性能、类型安全和人体工程学特性。



安装与连接



在 Cargo.toml 中添加依赖:



[dependencies]redis = { version = "0.25", features = ["tokio-comp"] }  # 用于基于 tokio 的异步# 或redis = "0.25"  # 仅同步模式


基本 Redis 连接(同步方式):



use redis::Commands;

fn main() -> redis::RedisResult<()> { let client = redis::Client::open("redis://127.0.0.1:6379/")?; let mut con = client.get_connection()?;

// 设置和获取值 con.set("key", "value")?; let val: String = con.get("key")?; println!("获取的值: {}", val);

Ok(())}


主要功能



1. 类型化命令

库会自动将 Rust 类型转换为 Redis 类型,反之亦然。支持字符串、数字、元组、向量,以及通过 FromRedisValue / ToRedisArgs trait 实现的自定义类型。



use redis::Commands;

let mut con = client.get_connection()?;let count: i32 = con.incr("counter", 2)?; // 原子递增let exists: bool = con.exists("nonexistent")?;let members: Vec<String> = con.smembers("set_key")?;


2. 管道

管道允许通过一次网络请求发送多个命令,从而显著加速批量操作。



use redis::Pipeline;

let mut pipe = Pipeline::new();pipe.cmd("SET").arg("a").arg(1).ignore();pipe.cmd("SET").arg("b").arg(2).ignore();pipe.cmd("GET").arg("a");let result: i32 = pipe.query(&mut con)?;println!("a 的值: {}", result);


3. 异步模式 (async/await)

对于高负载应用,请使用基于 tokio 或 async-std 的异步 API。



use redis::AsyncCommands;

#[tokio::main]async fn main() -> redis::RedisResult<()> { let client = redis::Client::open("redis://127.0.0.1:6379/")?; let mut con = client.get_multiplexed_async_connection().await?;

con.set("async_key", "async_value").await?; let val: String = con.get("async_key").await?; println!("异步: {}", val);

Ok(())}


4. 发布/订阅

实现实时消息交换的发布/订阅模式。



use redis::{AsyncCommands, RedisResult};

#[tokio::main]async fn main() -> RedisResult<()> { let client = redis::Client::open("redis://127.0.0.1:6379/")?;

// 订阅者 let mut pubsub = client.get_async_connection().await?.into_pubsub(); pubsub.subscribe("news").await?;

loop { let msg = pubsub.next_message().await?; println!("收到: {:?}", msg.get_payload::<String>()?); }}


5. 事务 (MULTI/EXEC)

将命令分组为原子事务。



use redis::Commands;

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


6. 集群

要使用 Redis 集群,请使用 redis::cluster::ClusterClient:

\

推荐