1 unstable release
Uses new Rust 2024
new 0.1.0 | May 16, 2025 |
---|
#134 in Caching
9KB
147 lines
LRU Cache Rust Implementation
Потокобезопасный кеш с политикой вытеснения Least Recently Used (LRU), поддержкой TTL и ограничениями по размеру.
Установка
Добавьте в Cargo.toml
:
[dependencies]
lru-cache-rs = { path = "./lru-cache-rs" }
Использование
Создание кеша
use lru_cache_rs::SafeLRUCache;
use std::time::Duration;
// Создать кеш на 100 элементов с максимальным размером 1MB
let cache = SafeLRUCache::new(100, Some(1024 * 1024));
Основные операции
Добавление элемента:
// Без TTL
cache.put("key1", "value1", None, 10);
// С TTL (5 секунд)
cache.put("key2", "value2", Some(Duration::from_secs(5)), 20);
Получение элемента:
if let Some(value) = cache.get(&"key1") {
println!("Found: {}", value);
}
Очистка просроченных элементов:
cache.clear_expired();
Параметры
capacity
: максимальное количество элементовmax_size
: максимальный общий размер в байтах (опционально)ttl
: время жизни элемента (опционально)size
: размер элемента в байтах (используется для ограничения по размеру)
Особенности
- Автоматическое вытеснение старых элементов при достижении лимитов
- Потокобезопасность (можно использовать из нескольких потоков)
- Поддержка времени жизни элементов (TTL)
- Два критерия вытеснения: по количеству и по размеру
Пример
use std::thread;
let cache = SafeLRUCache::new(2, None);
cache.put("a", 1, None, 1);
cache.put("b", 2, None, 1);
assert_eq!(cache.get(&"a"), Some(1));
// Добавление нового элемента вытеснит "b" (по принципу LRU)
cache.put("c", 3, None, 1);
assert_eq!(cache.get(&"b"), None);