use rez_next_cache::{
benchmarks::{BenchmarkConfig, CacheBenchmarkSuite},
IntelligentCacheManager, UnifiedCache, UnifiedCacheConfig,
};
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("ð§ Intelligent Cache System Demo");
println!("================================\n");
demo_basic_operations().await?;
demo_multilevel_caching().await?;
demo_predictive_preheating().await?;
demo_adaptive_tuning().await?;
demo_performance_monitoring().await?;
demo_comprehensive_benchmarks().await?;
println!("\nâ
All demos completed successfully!");
Ok(())
}
async fn demo_basic_operations() -> Result<(), Box<dyn std::error::Error>> {
println!("ðĶ Demo 1: Basic Cache Operations");
println!("---------------------------------");
let config = UnifiedCacheConfig::default();
let cache = IntelligentCacheManager::<String, String>::new(config);
cache.put("key1".to_string(), "value1".to_string()).await?;
cache.put("key2".to_string(), "value2".to_string()).await?;
cache.put("key3".to_string(), "value3".to_string()).await?;
if let Some(value) = cache.get(&"key1".to_string()).await {
println!("â Retrieved: key1 = {}", value);
}
let stats = cache.get_stats().await;
println!("ð Cache Stats:");
println!(" L1 entries: {}", stats.l1_stats.entries);
println!(" L1 hit rate: {:.2}%", stats.l1_stats.hit_rate * 100.0);
println!(
" Overall hit rate: {:.2}%",
stats.overall_stats.overall_hit_rate * 100.0
);
println!("â
Basic operations demo completed\n");
Ok(())
}
async fn demo_multilevel_caching() -> Result<(), Box<dyn std::error::Error>> {
println!("ðïļ Demo 2: Multi-level Caching");
println!("------------------------------");
let config = UnifiedCacheConfig {
l1_config: rez_next_cache::L1CacheConfig {
max_entries: 5, promotion_threshold: 2,
..Default::default()
},
..Default::default()
};
let cache = IntelligentCacheManager::<String, String>::new(config);
for i in 0..10 {
let key = format!("item_{}", i);
let value = format!("value_{}", i);
cache.put(key, value).await?;
}
println!("ð After filling cache:");
let stats = cache.get_stats().await;
println!(" L1 entries: {}", stats.l1_stats.entries);
println!(" L2 entries: {}", stats.l2_stats.entries);
println!(" Promotions: {}", stats.overall_stats.promotions);
println!(" Demotions: {}", stats.overall_stats.demotions);
for _ in 0..3 {
let _ = cache.get(&"item_1".to_string()).await;
let _ = cache.get(&"item_2".to_string()).await;
}
println!("ð After repeated access:");
let stats = cache.get_stats().await;
println!(" L1 entries: {}", stats.l1_stats.entries);
println!(" L2 entries: {}", stats.l2_stats.entries);
println!(" Promotions: {}", stats.overall_stats.promotions);
println!("â
Multi-level caching demo completed\n");
Ok(())
}
async fn demo_predictive_preheating() -> Result<(), Box<dyn std::error::Error>> {
println!("ðŪ Demo 3: Predictive Preheating");
println!("--------------------------------");
let config = UnifiedCacheConfig {
preheating_config: rez_next_cache::PreheatingConfig {
enable_predictive_preheating: true,
enable_pattern_learning: true,
min_confidence_threshold: 0.5,
..Default::default()
},
..Default::default()
};
let cache = IntelligentCacheManager::<String, String>::new(config);
println!("ðŊ Creating access patterns...");
for cycle in 0..5 {
for i in 0..10 {
if i % 3 == cycle % 3 {
let key = format!("pattern_key_{}", i);
let value = format!("pattern_value_{}", i);
if cache.get(&key).await.is_none() {
cache.put(key.clone(), value).await?;
}
cache.preheater().record_access(&key).await;
}
}
sleep(Duration::from_millis(100)).await;
}
let preheating_stats = cache.preheater().get_stats();
println!("ð Preheating Stats:");
println!(" Patterns learned: {}", preheating_stats.patterns_learned);
println!(" Predictions made: {}", preheating_stats.predictions_made);
println!(
" Average confidence: {:.2}",
preheating_stats.avg_confidence
);
let recommendations = cache.preheater().get_preheat_recommendations().await;
println!("ðŊ Preheating recommendations: {}", recommendations.len());
for (key, score) in recommendations.iter().take(3) {
println!(" {} (score: {:.3})", key, score);
}
println!("â
Predictive preheating demo completed\n");
Ok(())
}
async fn demo_adaptive_tuning() -> Result<(), Box<dyn std::error::Error>> {
println!("âïļ Demo 4: Adaptive Tuning");
println!("---------------------------");
let config = UnifiedCacheConfig {
tuning_config: rez_next_cache::TuningConfig {
enable_adaptive_tuning: true,
min_samples_for_tuning: 5,
target_hit_rate: 0.9,
..Default::default()
},
..Default::default()
};
let cache = IntelligentCacheManager::<String, String>::new(config);
println!("ð Simulating poor hit rate workload...");
for i in 0..50 {
let key = format!("random_key_{}", i);
let value = format!("random_value_{}", i);
let _ = cache.get(&key).await;
cache.put(key, value).await?;
}
let stats = cache.get_stats().await;
cache.tuner().record_performance(&stats).await;
let recommendations = cache.tuner().analyze_and_tune().await;
println!("ðŊ Tuning recommendations: {}", recommendations.len());
for rec in recommendations.iter().take(3) {
println!(
" {}: {:.3} -> {:.3} (confidence: {:.2})",
rec.parameter, rec.current_value, rec.recommended_value, rec.confidence
);
}
let tuning_stats = cache.tuner().get_stats();
println!("ð Tuning Stats:");
println!(" Operations: {}", tuning_stats.tuning_operations);
println!(" Success rate: {:.2}%", tuning_stats.success_rate * 100.0);
println!(
" Current confidence: {:.2}",
tuning_stats.current_confidence
);
println!("â
Adaptive tuning demo completed\n");
Ok(())
}
async fn demo_performance_monitoring() -> Result<(), Box<dyn std::error::Error>> {
println!("ð Demo 5: Performance Monitoring");
println!("----------------------------------");
let config = UnifiedCacheConfig {
monitoring_config: rez_next_cache::MonitoringConfig {
enable_detailed_stats: true,
enable_performance_metrics: true,
enable_event_logging: true,
..Default::default()
},
..Default::default()
};
let cache = IntelligentCacheManager::<String, Vec<u8>>::new(config);
let monitor = cache.monitor();
println!("ð Performing monitored operations...");
for i in 0..100 {
let key = format!("perf_key_{}", i);
let value = vec![i as u8; 1024];
cache.put(key.clone(), value).await?;
if i % 3 == 0 {
let _ = cache.get(&key).await;
}
}
let metrics = monitor.get_performance_metrics().await;
println!("ð Performance Metrics:");
println!(" Avg GET latency: {:.2}Ξs", metrics.avg_get_latency_us);
println!(" Avg PUT latency: {:.2}Ξs", metrics.avg_put_latency_us);
println!(" Operations/sec: {:.2}", metrics.ops_per_second);
println!(" Peak memory: {} bytes", metrics.peak_memory_usage);
let events = monitor.get_recent_events(5).await;
println!("ð Recent events: {}", events.len());
for event in events.iter().take(3) {
println!(" {:?}: {}Ξs", event.event_type, event.latency_us);
}
println!("â
Performance monitoring demo completed\n");
Ok(())
}
async fn demo_comprehensive_benchmarks() -> Result<(), Box<dyn std::error::Error>> {
println!("ð Demo 6: Comprehensive Benchmarks");
println!("------------------------------------");
let config = UnifiedCacheConfig::high_performance();
let bench_config = BenchmarkConfig {
operations_count: 10_000, worker_count: 2,
key_space_size: 1_000,
value_size: 512,
..Default::default()
};
let suite = CacheBenchmarkSuite::new(config, bench_config);
println!("ð Running benchmark: Sequential Operations");
let result = suite.benchmark_sequential_operations().await;
println!(
" Result: {:.2} ops/sec, {:.2}Ξs avg latency",
result.ops_per_second, result.avg_latency_us
);
println!("ð Running benchmark: Concurrent Operations");
let result = suite.benchmark_concurrent_operations().await;
println!(
" Result: {:.2} ops/sec, {:.2}Ξs avg latency",
result.ops_per_second, result.avg_latency_us
);
println!("ð Running benchmark: Hit Rate Optimization");
let result = suite.benchmark_hit_rate_optimization().await;
println!(
" Result: {:.2} ops/sec, hit rate: {:.2}%",
result.ops_per_second,
result.hit_rate * 100.0
);
let stats = suite.get_cache_stats().await;
println!("ð Final Cache Statistics:");
println!(
" Overall hit rate: {:.2}%",
stats.overall_stats.overall_hit_rate * 100.0
);
println!(
" Efficiency score: {:.2}",
stats.overall_stats.efficiency_score
);
println!(" Total entries: {}", stats.overall_stats.total_entries);
println!("â
Comprehensive benchmarks demo completed\n");
Ok(())
}