Rust 中的缓存:`cached` 库

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

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

开始课程

什么是 `cached` 以及为什么需要它?

cached 库是一个强大且灵活的工具,用于在 Rust 中缓存函数调用的结果。它可以通过避免重复计算昂贵操作(例如数据库查询、大数据计算、外部 API 调用)来显著加快程序执行速度。缓存对于 Web 服务器、游戏引擎、分析系统以及任何需要重复请求相同数据的应用程序特别有用。

安装

将依赖项添加到您的 Cargo.toml 中:

[dependencies]cached = "0.48"

之后执行 cargo build — 该库即可使用。

主要功能

  • 函数缓存 — 根据函数参数自动保存函数调用的结果。
  • TTL(生存时间) — 设置缓存的生命周期,之后数据会自动删除。
  • 最大缓存大小 — 限制存储条目的数量(使用 LRU 启发式算法)。
  • 异步支持 — 通过 cached::async 与 async 函数一起使用。
  • 存储后端 — 内置支持 Redis、Memcached、文件缓存和内存存储。

Rust 代码示例

use cached::proc_macro::cached;use std::time::Duration;

// 缓存一个函数,TTL 为 60 秒,最多 10 个条目#[cached( time = 60, size = 10, key = "u32", convert = r#"{ _input }"#)]fn expensive_computation(input: u32) -> String { println!("正在计算 {}", input); std::thread::sleep(Duration::from_secs(2)); format!("{} 的结果", input)}

fn main() { // 第一次调用 — 计算(2 秒) println!("{}", expensive_computation(42)); // 第二次调用 — 从缓存中立即返回 println!("{}", expensive_computation(42));}

第一次调用 expensive_computation(42) 时,函数会执行(延迟 2 秒),而再次调用时,结果会立即从缓存中获取。

何时使用

cached 库非常适合用于:

  • 加速参数不变的频繁调用函数。
  • 减少数据库或外部服务的负载。
  • 在递归算法中实现记忆化(例如斐波那契数列)。
  • 在 API 中创建缓存代理层。

如果数据经常变化或结果依赖于外部状态(时间、随机性),请避免使用缓存。

结论

cached 是一个简约但功能强大的库,可以解决 Rust 中 90% 的缓存问题。得益于宏,它不需要样板代码,并且可以轻松集成到任何项目中。立即安装它,感受性能的提升!

推荐