LRU Cache
Кеш LRU на Rust
Высокопроизводительная реализация кеша с алгоритмом вытеснения LRU (Least Recently Used) и поддержкой времени жизни записей.
Возможности
- Алгоритм LRU: Автоматическое вытеснение редко используемых элементов при заполнении кеша
- Время жизни записей (TTL): Опциональное ограничение времени хранения элементов
- O(1) сложность операций: Вставка и получение за константное время
- Безопасная работа с памятью: Использование
BoxиNonNullдля управления памятью - Обобщённая реализация: Работает с любыми типами ключей (
K: Eq + Hash + Clone) и значений (V)
Базовое использование
use LruCache;
use Duration;
let mut cache = new; // Создаём кеш ёмкостью 2 элемента
// Добавляем значения
cache.put; // Без ограничения времени
cache.put; // С временем жизни 1 секунда
// Получаем значения
assert_eq!;
assert_eq!;
// Вытеснение по LRU
cache.put; // Вытеснит "a", если он использовался давнее всех
Основные методы
Основные операции
new(capacity: usize, cleanup_mode: CleanupMode) -> Self- Создание нового кеша указанной ёмкости + опция включения evict_expired при операциях вставки/чтенияput(key: K, value: V, ttl: Option<Duration>)- Добавление элементаget(key: &K) -> Option<&V>- Получение элемента (неизменяемая ссылка)get_mut(key: &K) -> Option<&mut V>- Получение элемента (изменяемая ссылка)
Режим работы
CleanupMode::OnAccess- Автоматическая очистка при каждом доступеCleanupMode::OnDemand- Только при ручном вызовеevict_expired()(ручное управление)
Вспомогательные методы
len() -> usize- Текущее количество элементовis_empty() -> bool- Проверка на пустотуcapacity() -> usize- Максимальная ёмкость кешаevict_expired- ручная очитка по ttl
Производительность
- Все операции (добавление/получение) выполняются за O(1)
- Используется HashMap для быстрого поиска и двусвязный список для управления порядком