Кэширование в Rust: библиотека `cached`

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое `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-кода и легко интегрируется в любой проект. Установите её уже сегодня и ощутите прирост производительности!

Рекомендаций