lru-cache-rs 0.1.0

lru cache
Documentation
  • Coverage
  • 0%
    0 out of 6 items documented0 out of 5 items with examples
  • Size
  • Source code size: 11.58 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.3 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 10s Average build duration of successful builds.
  • all releases: 12s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • ibatanov/lru-cache-rs
    2 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • ibatanov

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);