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 and LRU
- ⏰ TTL support - Automatic expiration of cached entries
- 📊 Limit control - Set maximum cache size
- 🔍 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.1.0"
= { = "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
FIFO (First In, First Out)
- Default policy
- Evicts oldest entries first
- O(1) performance for all operations
- Best for simple use cases
LRU (Least Recently Used)
- Evicts least recently accessed entries
- O(n) performance for cache hits (reordering)
- Best when access patterns matter
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