High-performance in-memory cache tier.
This crate provides InMemoryCache, a concurrent in-memory cache with a
TinyLFU eviction algorithm for excellent hit rates. Use InMemoryCacheBuilder
to configure capacity, TTL, and TTI.
use std::time::Duration;
use cachet_memory::InMemoryCacheBuilder;
use cachet_tier::{CacheEntry, CacheTier};
let cache = InMemoryCacheBuilder::<String, i32>::new()
.max_capacity(1000)
.time_to_live(Duration::from_secs(300))
.build()
.expect("Failed to build cache");
cache
.insert("key".to_string(), CacheEntry::new(42))
.await
.unwrap();
let value = cache.get(&"key".to_string()).await.unwrap();
assert_eq!(*value.unwrap().value(), 42);- Capacity limits: Set maximum entry count with automatic eviction
- TTL/TTI: Configure time-to-live and time-to-idle expiration
- Per-entry TTL: Honors
CacheEntry::expires_afterfor per-entry expiration - Thread-safe: Safe for concurrent access from multiple tasks
- Zero external types: Builder API keeps implementation details private
This tier supports three independent expiration mechanisms. When multiple are active, the shortest duration wins - an entry is evicted at the earliest of:
- The per-entry TTL from
CacheEntry::expires_after - The cache-wide TTL from
InMemoryCacheBuilder::time_to_live - The cache-wide TTI from
InMemoryCacheBuilder::time_to_idle
This means the builder-level TTL/TTI acts as an upper bound on per-entry TTL. A per-entry TTL longer than the builder TTL will be silently clamped to the builder value. To give per-entry TTL full control, either leave the builder-level TTL/TTI unset or set them to a sufficiently high ceiling.
This crate was developed as part of The Oxidizer Project. Browse this crate's source code.
