Rust 操作 Redis 从入门到生产级应用

如何用rust为redis写一个client 如何用rust为redis写一个client 最近nosql变得非常流行,redis作为其中的佼佼者,基本也是大部分程序员必备的技能了。我们知道,redis是一个key-value数据库,它运行在内存中但是可以持久化到内存。我们一般很熟悉redis的那些基本命令,但是如何使用某种语言来操作redis呢?那些常用的语言一般都有相应的驱动,但是像rust这样的新语言呢? Redis Protocol ... 阅读详情

Rust 操作 Redis 从入门到生产级应用

在现代后端开发中,Redis 作为高性能的内存数据库,广泛用于缓存、会话管理、消息队列等场景。本文将基于主流的 redis-rs 库,带你全面掌握 Rust 操作 Redis 的技巧,覆盖同步/异步双模式、连接池、序列化等内容。

添加库依赖

在 Cargo.toml 中配置依赖:

[dependencies]
redis = { version = "1.2", features = [
    "tokio-comp",            # 异步支持
    "connection-manager",    # 内置连接池
    "tokio-native-tls-comp",
] }
tokio = { version = "1", features = ["full"] }
anyhow = "1.0"

基础操作

redis-rs 对 Redis 原生命令做了优雅封装,API 与 Redis 命令高度一致,学习成本极低,同时依托 Rust 的编译期检查,能从根源规避类型错误、命令误用等问题。以下示例分别展示同步与异步模式下的基础操作。

同步模式:简单场景快速上手

同步模式适合简单脚本、单线程工具等场景,核心是通过 Client 创建连接,再通过 Commands 特征调用 Redis 命令:

use anyhow::Result;
use redis::{Client, Commands};

fn main() -> Result<()> {
    // 创建 Redis 客户端
    let client = Client::open("redis://127.0.0.1:6379")?;
    // 获取连接(同步连接)
    let mut conn = client.get_connection()?;

    // 字符串操作:SET / GET
    let _: () = conn.set("username", "rust_dev")?; // SET 命令,返回空元组
    let username: Option<String> = conn.get("username")?; // GET 命令,返回 Option(避免空值 panic)
    println!("获取 username: {:?}", username); // 输出:Some("rust_dev")

    // 哈希操作:HSET / HGET / HGETALL
    let _: () = conn.hset("user:1", "id", 1)?;
    let _: () = conn.hset("user:1", "name", "Alice")?;
    let user_name: Option<String> = conn.hget("user:1", "name")?;
    let user: Option<redis::Value> = conn.hgetall("user:1")?; // 获取整个哈希
    println!("获取用户名称: {:?}", user_name); // 输出:Some("Alice")
    println!("获取用户全部信息: {:?}", user);

    // 列表操作:LPUSH / LRANGE
    let _: () = conn.lpush("tasks", "learn redis")?;
    let _: () = conn.lpush("tasks", "learn rust")?;
    let tasks: Vec<String> = conn.lrange("tasks", 0, -1)?; // 获取所有列表元素
    println!("任务列表: {:?}", tasks); // 输出:["learn rust", "learn redis"]

    // 删除操作:DEL
    let _: () = conn.del("username")?;

    Ok(())
}

异步模式:高并发场景首选

异步模式基于 Tokio 实现,非阻塞 IO,其 API 与同步模式高度一致:

use anyhow::Result;
use redis::{AsyncCommands, Client};

#[tokio::main]
async fn main() -> Result<()> {
    // 创建 Redis 客户端
    let client = Client::open("redis://127.0.0.1:6379")?;
    // 获取异步连接
    let mut conn = client.get_multiplexed_async_connection().await?;

    // 异步操作:与同步模式 API 一致
    let _: () = conn.set("async_key", "async_value").await?;
    let async_value: Option<String> = conn.get("async_key").await?;
    println!("异步获取值: {:?}", async_value); // 输出:Some("async_value")

    // 哈希操作(异步)
    let _: () = conn.hset("async_user:1", "age", 25).await?;
    let age: Option<i32> = conn.hget("async_user:1", "age").await?;
    println!("异步获取用户年龄: {:?}", age); // 输出:Some(25)

    Ok(())
}

进阶特性

在实际生产环境中,仅基础操作远远不够,redis-rs 提供还提供了连接池、管道、事务、序列化等特性,能帮助我们构建更稳定、高效的服务。

连接池:高并发下的连接管理

频繁创建/销毁 Redis 连接会严重影响性能,connection-manager 特性提供了内置连接池,能自动管理连接的创建、复用、销毁和重连,无需手动处理连接生命周期:

use anyhow::Result;
use redis::{AsyncCommands, Client};

#[tokio::main]
async fn main() -> Result<()> {
    // 创建 Redis 客户端
    let client = Client::open("redis://127.0.0.1:6379")?;
    // 创建连接池,默认配置
    // 另外可提供 get_connection_manager_with_config 自定义最大连接数、超时时间等
    let mut conn_manager = client.get_connection_manager().await?;

    // 从连接池获取连接并执行操作(自动复用连接)
    for i in 0..5 {
        let key = format!("pool_key:{}", i);

        let _: () = conn_manager.set(&key, i).await?;
        let value: Option<i32> = conn_manager.get(&key).await?;

        println!("连接池操作 {}: {:?}", key, value);
    }

    Ok(())
}

管道(Pipeline):批量操作提升性能

Redis 管道允许将多个命令批量发送到服务器,减少网络往返次数,显著提升批量操作的性能。redis-rs 支持管道的链式调用,通过 pipe() 创建管道,添加命令后通过 exec() 或 query() 执行:

use anyhow::Result;
use redis::{Client, pipe};

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

    // 创建管道,批量执行 SET 命令(无返回值)
    pipe()
        .set("pipe_key1", "value1")
        .set("pipe_key2", "value2")
        .set("pipe_key3", "value3")
        .exec(&mut conn)?;
    println!("管道批量 SET 执行完成");

    // 批量执行 GET 命令(获取返回值)
    let (val1, val2, val3): (Option<String>, Option<String>, Option<String>) = pipe()
        .get("pipe_key1")
        .get("pipe_key2")
        .get("pipe_key3")
        .query(&mut conn)?;
    println!("管道批量 GET 结果: {:?}, {:?}, {:?}", val1, val2, val3);

    Ok(())
}

事务(Transaction):保证操作原子性

Redis 事务通过 MULTI、EXEC 命令实现,确保多个命令原子性执行(要么全部成功,要么全部失败)。redis-rs 通过管道提供的 atomic() 方法进行事务操作:

use anyhow::Result;
use redis::{Client, pipe};

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

    // 开启事务
    let mut pipe = pipe();
    pipe.atomic();

    // 向事务中添加命令
    pipe.set("tx_key1", "tx_val1")
        .hset("tx_user:1", "name", "Bob")
        .lpush("tx_tasks", "finish transaction");

    // 执行事务(通过 query 发送所有命令)
    let results: Vec<redis::Value> = pipe.query(&mut conn)?;
    println!("事务执行结果: {:?}", results);

    Ok(())
}

Lua 脚本:扩展 Redis 功能与原子操作

Redis 支持通过 Lua 脚本执行简单原子操作,redis-rs 提供简洁的 API 可快速调用脚本:

use anyhow::Result;
use redis::{Client, Script};

// 定义结构体
#[tokio::main]
async fn main() -> Result<()> {
    let client = Client::open("redis://127.0.0.1:6379")?;
    let mut conn = client.get_multiplexed_async_connection().await?;

    // 定义 Lua 脚本:自增指定 key,返回自增后的值
    let lua_script = Script::new(
        r#"
        local key = KEYS[1]
        -- 调用 Redis 原生命令 INCR,实现自增
        return redis.call('INCR', key)
    "#,
    );

    // 执行脚本:通过 .key() 传递 KEYS 参数
    let new_val: i32 = lua_script
        .key("simple_lua_counter") // 添加 KEY
        .invoke_async(&mut conn) // 执行脚本
        .await?;
    println!("Lua 脚本执行结果(自增后): {}", new_val); // 首次执行输出 1

    // 传递参数的简单示例,设置 key 值并返回
    let set_and_get_script = Script::new(
        r#"
        local key = KEYS[1]
        local val = ARGV[1]
        redis.call('SET', key, val)
        return val
    "#,
    );

    let result: String = set_and_get_script
        .key("lua_test_key") // 添加 KEY
        .arg("test_value") // 添加 ARG
        .invoke_async(&mut conn)
        .await?;
    println!("设置并返回值: {}", result); // 输出 test_value

    Ok(())
}

注意事项与最佳实践

错误处理

Rust 强调错误处理的严谨性,redis-rs 的所有操作都会返回 RedisResult,实际开发中应避免使用 unwrap(),建议通过 ? 关键字传播错误,或者使用 thiserror 自定义错误类型,提升代码可维护性。

连接池配置

生产环境中,需根据并发量合理配置连接池的最大连接数(默认 10),避免连接数过多导致 Redis 服务压力过大,或连接数过少导致请求阻塞。同时可设置连接超时时间,防止连接泄露。

数据类型匹配

redis-rs 是强类型客户端,Redis 数据类型与 Rust 类型需严格匹配(如 Redis 字符串对应 Rust 的 String,Redis 数字对应 Rust i32/u64 等),否则会导致编译错误或运行时错误。

性能优化

  • 批量操作优先使用管道,减少网络往返;
  • 高并发场景使用异步模式 + 连接池,充分利用系统资源;
  • 避免存储过大的数据(Redis 适合存储轻量数据),如需存储大对象,可考虑分块存储或使用其他存储方案。

总结

看完这篇文章,你对 redis-rs 应该已经有足够的了解了,接下来就能实际开发中使用它了。

Claude API中转网关实战:Rust构建生产级Anthropic代理 API网关是现代AI应用架构中的关键中间层,用于协议适配、流量治理与成本优化。其核心原理在于拦截客户端请求,完成鉴权转发、错误重试与上下文增强等标准化处理,从而提升服务稳定性与资源利用率。在大模型调用场景中,网关能有效解决直连Anthropic时常见的400/403/429错误、SDK封装限制及token成本失控等问题。典型应用包括IDE插件代理、内网知识库接入、教育账号合规出口等。本文聚焦Claude Code与Opus 4.7模型的落地实践,基于Rust+Axum实现低延迟、高并发、零内存泄漏的轻量中转 阅读详情

相关推荐

openEuler 快速入门

openEuler 是一个专注于企业领域的 Linux 发行版,广泛应用于服务器、云计算和边缘计算场景。最初由华为开发,现在由 Open Atom Foundation 进行开发和管理。Open Atom Foundation 是中国第一个开源软件基金会,得到了华为、阿里巴巴、腾讯、百度等知名企业的支持,并且中国信息通信部也是该基金会的一部分。可以将 openEuler 看作是 Red Hat 或 SUSE Linux 的等价物,但它与 SUSE Linux 更为相似。

HuaweiLab_Peach的博客 2052

Rust与Redis数据库开发实战:构建高性能会话管理系统

本文介绍了如何使用Rust语言结合Redis数据库构建高性能会话管理系统。首先讲解了Redis作为内存数据库的优势及Rust生态中的redis-rs库特点。详细说明了开发环境搭建步骤,包括Redis安装和Rust项目创建。文章重点展示了Redis基础操作示例代码:字符串操作(设置/获取键值)、哈希操作(用户数据存储)和列表操作(任务队列管理)。这些示例为开发会话管理等应用提供了实用参考,体现了Rust与Redis结合在性能和安全方面的优势。

编程世界如山海,探索不止。 2万+

深圳SILAS(智能融合低空系统)无人机调度系统介绍

一、系统定位与核心目标SILAS(Smart Integrated Lower Airspace System)是深圳市为低空经济打造的“数字大脑”,由粤港澳大湾区数字经济研究院自主研发,定位为城市级低空飞行智能调度与管理平台。核心目标是解决低空经济中“高密度、高复杂度、多主体”的飞行调度难题,实现空域资源的高效分配、飞行安全的智能监管及全场景服务的无缝协同,支撑深圳从“无人机之都”向“天空之城”升级。二、核心架构:低空基础设施“四张网”设施网。

主攻大数据 人工智能 物联网 安全 低空经济等方向。mtsc 、gtest特邀分享嘉宾 3741

Redis与Rust集成:Rust客户端与连接池

1.背景介绍 1. 背景介绍 Redis 是一个开源的高性能键值存储系统,它支持数据的持久化,不仅仅支持简单的键值对,还支持列表、集合、有序集合和哈希等数据结构的存储。Redis 还通过提供多种数据结构的高效操作,支持各种请求的高吞吐量和低延迟。 Rust 是一种系统级编程语言,它具有多线程、无所有权和内存安全等特性。Rust 的设计目标是为系统级编程提供安全和可靠的编程体验,同时提供与 C...

AI天才研究院 2141

现代 AI Agent 编排技术全景(1)—— 分类体系与四大技术维度

本文介绍基于 LLM 的现代 Agent 分类体系与四大技术维度,形成能够刻画不同 Agent 产品架构特征的分类法

佚失的诗篇 232

别再手动调波形了!用STM32G474的HRTIM+DAC生成精密锯齿波,附完整CubeMX配置

本文详细介绍了如何利用STM32G474的高分辨率定时器(HRTIM)和数模转换器(DAC)协同工作,实现高精度锯齿波生成。通过CubeMX配置指南、关键寄存器计算和实践技巧,帮助开发者快速掌握全硬件实现的波形生成方案,显著提升嵌入式系统的波形控制精度和响应速度。

weixin_28716769的博客 246

Rust 操作 Redis 开发指南:从入门到精通

本文为Redis+Rust开发实践指南,涵盖从基础到生产环境的全流程。主要内容包括:Redis安装配置(Windows/Ubuntu)、Rust项目设置与连接;Redis核心数据类型(字符串、哈希、列表、集合)的Rust操作示例;实战构建用户会话系统;性能优化技巧(连接池、管道、错误处理);Redis+MySQL协作架构(缓存模式、实时统计);生产环境部署建议(配置优化、监控维护)。通过丰富代码示例,展示如何利用Redis+Rust构建高性能应用,特别适合需要处理高并发、低延迟场景的开发者。

北京锋通科技有限公司的技术blog 1394

别再瞎选了!手把手教你根据车型等级,在CarSim里快速匹配最合适的动力学模型

本文详细介绍了如何在CarSim中根据车型等级快速匹配最合适的动力学模型,提升仿真效率。通过分析CarSim模型库与A/B/C/D级车标准的对应关系,提供四步精准定位方法和不同车型的特殊处理技巧,帮助工程师避免常见错误,显著缩短模型准备时间。

weixin_27015733的博客 262

Rust 的 redis-rs 库

它完美契合 Rust 的设计哲学,兼具类型安全、高性能、轻量无冗余的核心优势,原生支持同步与异步双模式,无缝适配 Tokio 异步生态,是高并发服务的标配。

码刀攻城 1317

第七篇:A133 Android 10 触摸提示音过大

描述: 开启触摸提示音功能之后,客户反馈触摸提示音过大,需要改小。 解决方案: 看代码注释,在framework下搜索方法即可。 /** @see AudioManager#playSoundEffect(int) */ public void playSoundEffect(int effectType) { playSoundEffectVolume(effectType, -1.0f); } /** @see AudioManager#playSoundEff

qq_33088619的博客 1696

结构函数分析与 JESD51-14 标准详解

结构函数(Structure Function)是将器件瞬态热响应曲线(冷却曲线)通过数学变换,转换为热阻(Rth)与热容(Cth)沿热流路径一维分布的图形化分析方法。它能“看到”热量从结(Junction)到壳(Case)或环境的过程中,经过每一层结构时的热学特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 57

Redis在Rust中的应用瓶颈突破:5个生产环境验证过的优化策略

突破Rust Redis整合性能瓶颈,5大策略提升系统响应速度。涵盖连接池优化、异步处理、序列化方案等生产验证方法,适用于高并发场景,显著降低延迟,提高吞吐量。值得收藏的实战指南,点击了解优化细节。

LogicWander的博客 733

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mini-redis项目解析:5分钟快速入门异步Rust网络编程

想要学习异步Rust网络编程却不知从何开始?🤔 **mini-redis** 项目就是你的最佳入门选择!这个基于Tokio框架构建的Redis客户端和服务器实现,专为学习异步编程模式而设计。 ## 🚀 什么是mini-redis? **mini-redis** 是一个使用Tokio异步运行时构建的简化版Redis实现。它不是一个生产级项目,而是专门为帮助开发者理解异步Rust编程概念而创建

gitblog_00539的博客 839

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

如何快速掌握Rust后端开发:从零到生产的完整实战指南

想要快速上手Rust后端开发吗?这个邮件订阅项目将带你从零开始,逐步构建一个生产级别的Rust后端应用。通过实际的项目实践,你将掌握Rust后端开发的核心技能和部署技巧。 ## 🚀 5步搭建Rust后端服务 ### 第一步:环境配置与项目初始化 项目提供了完整的开发环境配置,包括Postgres数据库、Redis缓存服务等。通过`scripts/init_db.sh`和`scripts/in

gitblog_00409的博客 442

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

BullMQ Rust 入门指南:基于 Redis 的异步作业队列全面上手

BullMQ 是一个基于 Redis 的健壮作业队列系统,支持 Node.js、Python、.NET、Elixir、Rust 与 PHP 等多种语言。本文聚焦仓库中 Rust 语言实现的官方入门文档 [docs/gitbook/rust/introduction.md](https://link.gitcode.com/i/b3682ad3d715183e3d45bf375f4e69dd),从安

gitblog_00864的博客 449

Rust后端开发终极指南:从零构建生产级邮件订阅系统

掌握Rust后端开发,从基础概念到生产环境部署的完整实战教程。通过构建一个功能完善的邮件订阅系统,你将学会如何利用Rust的高性能特性、异步编程模型和现代化工具链,打造稳定可靠的Web服务。🚀 ## 项目概览与技术特色 《Zero To Production In Rust》项目通过一个完整的邮件订阅系统案例,展示了Rust在后端开发领域的强大实力。该项目不仅涵盖了基础API开发,还深入探讨

gitblog_00541的博客 245

使用指南:从零到生产环境中的Rust - 实战API开发

--- ## 项目介绍 **“从零到生产环境中的Rust”** 是一本专为想要掌握利用Rust进行后端API开发的开发者编写的书籍。这个开源项目提供了书中的示例代码,并随着书的内容进展展示了电子邮件新闻订阅项目逐步演化的各个阶段。为了跟随本书的步伐,你需要安装 **Rust** 和 **Docker**。项目涵盖了构建、测试及部署一个健壮的Web服务,全部采用Rust编程语言完成。 ## 项...

gitblog_00925的博客 788

从零构建生产级Rust后端:邮件订阅系统完整实战指南

想要掌握Rust后端开发的精髓吗?这个基于《Zero To Production In Rust》书籍的邮件订阅项目,将带你从零开始构建一个完整可用的生产级应用。无论你是Rust新手还是希望提升后端技能,这里都有你需要的一切! ## 🚀 项目亮点与核心价值 ### 实战驱动的学习路径 这个项目最大的特色就是**渐进式学习体验**。通过不同章节的代码快照,你可以清晰地看到项目从最简单的Hel

gitblog_00910的博客 483

ARDM深度解析:Redis可视化客户端的协议感知与生产级设计

Redis可视化客户端是开发者和运维人员管理缓存服务的关键工具,其核心能力不仅在于连接与展示,更取决于对Redis协议(如RESP2/RESP3)、集群拓扑、内存分析等底层机制的理解与实现。Another Redis Desktop Manager(ARDM)通过Rust重写协议解析模块、内置Key分析器、支持Cluster自动发现与Lua断点调试,显著提升了响应速度、稳定性和审计能力。相比传统GUI工具,它更接近‘协议感知型中间件前端’,适用于本地调试、生产集群治理及CI/CD自动化等多场景。本文聚焦AR

weixin_30861459的博客 453

[特殊字符] 从零到生产:Rust后端开发终极实战指南(含完整邮件API项目)

探索如何用Rust构建高性能邮件订阅API服务,从零开始到生产环境部署的全流程实践。本指南专为Rust初学者和后端开发新手设计,提供完整的Rust后端开发实战经验。 ## 📋 项目概述与技术栈 **Zero To Production In Rust** 是一个完整的邮件订阅API项目,展示了Rust在生产级后端开发中的强大能力。项目采用现代化技术栈: - **Rust语言** - 高性能

gitblog_00590的博客 969

【亲测免费】 Zero To Production In Rust:从零到生产环境的Rust后端开发指南

[Zero To Production In Rust](https://zero2prod.com) 是一本面向Rust后端开发的权威指南,旨在帮助开发者从零开始构建一个生产级别的后端应用。本书不仅提供了丰富的理论知识,还通过一个实际的邮件订阅项目,逐步引导读者掌握Rust后端开发的各个环节。 本项目作为书籍的补充材料,包含了邮件订阅项目在不同章节结束时的代码快照。通过这些快照,读者可以清晰地...

gitblog_01035的博客 1969

探索高效后端开发:使用Rust从零到生产

探索高效后端开发:使用Rust从零到生产 zero-to-productionCode for "Zero To Production In Rust", a book on API development using Rust.项目地址:https://gitcode.com/gh_mirrors/ze/zero-to-production Zero To Production In Rus...

gitblog_00050的博客 1367

Redis-rs完全指南:Rust生态中最强大的Redis客户端库终极教程

Redis-rs是Rust生态系统中功能最强大、性能最优的Redis客户端库,为开发者提供了与Redis、Valkey及任何兼容RESP(Redis序列化协议)的数据库服务器进行高效交互的完整解决方案。这个全面的指南将带你深入了解如何利用redis-rs构建高性能的Rust应用程序。 ## 🚀 为什么选择Redis-rs作为你的Redis客户端? Redis-rs不仅仅是一个简单的Redis

gitblog_00006的博客 361

DBX MCP Server 完全指南:用 Rust 原生 MCP 服务让 AI Agent 安全地操作数据库

DBX MCP Server 是 DBX 官方提供的 Model Context Protocol(MCP)服务,它以 Rust 实现核心逻辑,让 Claude Code、Cursor、Windsurf 等兼容 MCP 的 AI 客户端直接复用 DBX 中已经配置好的数据库连接,完成 Schema 查看、SQL 查询、Redis 命令、MongoDB 操作等任务。读完本文,你将掌握该服务的完整安装

gitblog_00709的博客 854

Hyperswitch全场景部署实战指南:从零到生产级架构搭建

Hyperswitch是一款基于Rust开发的开源支付交换机,旨在提供快速、可靠且经济的支付解决方案。本文将详细介绍如何从零基础开始,完成Hyperswitch的全场景部署,构建一套稳定高效的生产级支付架构。 ## 一、Hyperswitch核心架构解析 Hyperswitch采用分层架构设计,确保支付流程的高效处理和系统的稳定运行。其核心架构主要分为Web层、应用层和存储层三个部分。 [!

gitblog_00844的博客 1153
上一篇: SQLx:一款优秀的异步 SQL 工具库
下一篇: Rust + PostgreSQL 极简技术栈应用开发
Rust研习社
博客等级 码龄11年 51粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值