Что такое `cached` и зачем он нужен?
Библиотека cached — это мощный и гибкий инструмент для кэширования результатов вызова функций в Rust. Она позволяет значительно ускорить выполнение программ, избегая повторных вычислений дорогостоящих операций (например, запросов к БД, вычислений с большими данными, вызовов внешних API). Кэширование особенно полезно в веб-серверах, игровых движках, аналитических системах и любых приложениях, где одни и те же данные запрашиваются многократно.
Установка
Добавьте зависимость в ваш Cargo.toml:
[dependencies]
cached = "0.48"После этого выполните cargo build — библиотека готова к использованию.
Основные функции
- Кэширование функций — автоматическое сохранение результатов вызова функции на основе её аргументов.
- TTL (Time To Live) — задаётся время жизни кэша, после которого данные автоматически удаляются.
- Максимальный размер кэша — ограничение количества хранимых записей (LRU-эвристика).
- Асинхронная поддержка — работа с async-функциями через
cached::async. - Хранилища — встроенная поддержка Redis, Memcached, файлового кэша и in-memory хранилища.
Пример кода на 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 — это минималистичная, но мощная библиотека, которая решает 90% задач кэширования в Rust. Благодаря макросам она не требует boilerplate-кода и легко интегрируется в любой проект. Установите её уже сегодня и ощутите прирост производительности!