Cachelito Async
A flexible and efficient async caching library for Rust async/await functions.
Features
- 🚀 Lock-free caching - Uses DashMap for concurrent access without blocking
- 🎯 Multiple eviction policies - FIFO, LRU, LFU, and ARC (Adaptive Replacement Cache)
- 💾 Memory-based limits - Control cache size by memory usage (v0.10.1)
- ⏰ TTL support - Automatic expiration of cached entries
- 📊 Limit control - Set maximum cache size by entry count or memory
- 🔍 Result caching - Only caches
Okvalues fromResulttypes - 🌐 Global cache - Shared across all tasks and threads
- ⚡ Zero async overhead - No
.awaitneeded for cache operations - 📈 Statistics - Track cache hit/miss rates and performance metrics
Installation
Add this to your Cargo.toml:
[]
= "0.10.1"
= { = "1", = ["full"] }
Quick Start
use cache_async;
use Duration;
async
async
Examples
Basic Async Caching
use cache_async;
async
Cache with Limit and LRU Policy
use cache_async;
async
Cache with TTL (Time To Live)
use cache_async;
async
Result Caching (Only Ok Values)
use cache_async;
async
Cache Statistics
Track cache performance with built-in statistics:
use ;
async
async
async
Statistics Features:
- Automatic tracking of hits and misses
- Hit/miss rates calculation
- Global registry for all async caches
- Custom cache naming with
nameattribute - Thread-safe counters using
AtomicU64
Combining Features
use cache_async;
async
Macro Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit |
usize |
unlimited | Maximum number of entries in cache |
policy |
"fifo" | "lru" |
"fifo" |
Eviction policy when limit is reached |
ttl |
u64 |
none | Time-to-live in seconds |
name |
String |
function name | Custom cache identifier |
Eviction Policies
LRU (Least Recently Used) - Default
- Evicts least recently accessed entries
- O(n) performance for cache hits (reordering)
- Best when access patterns matter
- Ideal for temporal locality workloads
FIFO (First In, First Out)
- Evicts oldest entries first
- O(1) performance for all operations
- Best for simple use cases
- Predictable behavior
LFU (Least Frequently Used)
- Evicts least frequently accessed entries
- O(n) performance for eviction (finding minimum frequency)
- O(1) performance for cache hits (increment counter)
- Best for workloads with "hot" data
- Popular items remain cached longer
ARC (Adaptive Replacement Cache)
- Hybrid policy combining LRU and LFU
- Self-tuning based on access patterns
- O(n) performance for eviction and cache hits
- Best for mixed workloads
- Scan-resistant
Random Replacement
- Randomly evicts entries when cache is full
- O(1) performance for all operations
- Minimal overhead, no access tracking
- Best for baseline benchmarks
- Good for truly random access patterns
Policy Comparison:
| Policy | Eviction | Cache Hit | Use Case |
|---|---|---|---|
| LRU | O(1) | O(n) | Recent access matters |
| FIFO | O(1) | O(1) | Simple predictable caching |
| LFU | O(n) | O(1) | Frequency patterns matter |
| ARC | O(n) | O(n) | Mixed workloads, adaptive |
| Random | O(1) | O(1) | Baseline, random access |
Performance
- Lock-free: Uses DashMap for excellent concurrent performance
- No blocking: Cache operations don't block the async executor
- Minimal overhead: No
.awaitneeded for cache lookups - Memory efficient: Configurable limits prevent unbounded growth
Thread Safety
All caches are thread-safe and can be safely shared across multiple tasks and threads. The underlying DashMap provides excellent concurrent performance without traditional locks.
Comparison with Sync Version
| Feature | cachelito | cachelito-async |
|---|---|---|
| Functions | Sync | Async |
| Storage | Thread-local or Global (RwLock) | Global (DashMap) |
| Concurrency | Mutex/RwLock | Lock-free |
| Scope | Thread or Global | Always Global |
| Best for | CPU-bound, sync code | I/O-bound, async code |
Examples in Repository
async_basic.rs- Basic async cachingasync_lru.rs- LRU eviction policyasync_concurrent.rs- Concurrent task accessasync_stats.rs- Cache statistics tracking
Run examples with:
Requirements
- Rust 1.70.0 or later
- Arguments must implement
Debugfor key generation - Return type must implement
Clonefor cache storage
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Related Crates
cachelito- Sync version for regular functionscachelito-core- Core caching primitivescachelito-macros- Sync procedural macros