use ri::{RiAppBuilder, RiCacheModule, RiCacheManager};
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Ri Cache Module Example ===\n");
let app = RiAppBuilder::new()
.with_cache_module(|cache| {
cache.with_config(|config| {
config
.with_max_size(10000)
.with_default_ttl(Duration::from_secs(300))
})
.with_memory_backend()
})
.build()?;
let cache_module = app.get_module::<RiCacheModule>();
let cache_manager = cache_module.get_manager();
println!("1. Basic Cache Operations");
println!(" ------------------------");
println!(" Setting 'user:1001' = 'John Doe'");
cache_manager.set("user:1001", b"John Doe", None).await?;
println!(" ✓ Value set successfully\n");
println!(" Getting 'user:1001'...");
if let Some(value) = cache_manager.get("user:1001").await? {
println!(" ✓ Found value: {}\n", String::from_utf8_lossy(&value));
} else {
println!(" ✗ Value not found\n");
}
println!("2. TTL-Based Expiration");
println!(" ---------------------");
println!(" Setting 'temporary:key' with 5 second TTL");
cache_manager.set(
"temporary:key",
b"This will expire",
Some(Duration::from_secs(5))
).await?;
println!(" ✓ Value set with TTL\n");
println!(" Checking 'temporary:key' before expiration...");
if let Some(value) = cache_manager.get("temporary:key").await? {
println!(" ✓ Value still exists: {}\n", String::from_utf8_lossy(&value));
}
println!(" Waiting 6 seconds for TTL expiration...");
tokio::time::sleep(Duration::from_secs(6)).await;
println!(" ✓ Wait complete\n");
println!(" Checking 'temporary:key' after expiration...");
if cache_manager.get("temporary:key").await?.is_none() {
println!(" ✓ Value expired and removed\n");
}
println!("3. Cache Statistics");
println!(" -----------------");
let stats = cache_manager.stats().await?;
println!(" Current cache stats:");
println!(" - Hits: {}", stats.hits);
println!(" - Misses: {}", stats.misses);
println!(" - Size: {}\n", stats.entries);
println!("4. Delete Operations");
println!(" ------------------");
println!(" Deleting 'user:1001'...");
cache_manager.delete("user:1001").await?;
println!(" ✓ Value deleted\n");
println!(" Verifying deletion...");
if cache_manager.get("user:1001").await?.is_none() {
println!(" ✓ Value successfully deleted\n");
}
println!("5. Clear All Cache");
println!(" ----------------");
println!(" Adding more values...");
cache_manager.set("key1", b"value1", None).await?;
cache_manager.set("key2", b"value2", None).await?;
cache_manager.set("key3", b"value3", None).await?;
println!(" ✓ Added 3 values\n");
println!(" Clearing all cache...");
cache_manager.clear().await?;
println!(" ✓ Cache cleared\n");
println!("6. Final Statistics");
println!(" -----------------");
let final_stats = cache_manager.stats().await?;
println!(" Final cache stats:");
println!(" - Hits: {}", final_stats.hits);
println!(" - Misses: {}", final_stats.misses);
println!(" - Size: {}\n", final_stats.entries);
println!("=== Cache Example Completed ===");
Ok(())
}