Create new cache manager with configuration
(config: CacheConfig)
| 120 | impl CacheManager { |
| 121 | /// Create new cache manager with configuration |
| 122 | pub fn new(config: CacheConfig) -> Result<Self, String> { |
| 123 | config.validate()?; |
| 124 | |
| 125 | let result_cache = Arc::new(ResultCache::new( |
| 126 | config.l1_config.max_entries, |
| 127 | config.l1_config.max_memory_bytes, |
| 128 | config.l2_config.max_entries, |
| 129 | config.l2_config.max_memory_bytes, |
| 130 | config.eviction_policy.clone(), |
| 131 | )); |
| 132 | |
| 133 | let plan_cache = Arc::new(PlanCache::new( |
| 134 | config.l3_config.max_entries, |
| 135 | config.l3_config.max_memory_bytes, |
| 136 | config |
| 137 | .l3_config |
| 138 | .default_ttl |
| 139 | .unwrap_or(Duration::from_secs(3600)), |
| 140 | )); |
| 141 | |
| 142 | let subquery_cache = Arc::new(SubqueryCache::new( |
| 143 | config.l1_config.max_entries / 2, // Subqueries are smaller, allow more entries |
| 144 | config.l1_config.max_memory_bytes / 4, // But use less memory |
| 145 | config |
| 146 | .l1_config |
| 147 | .default_ttl |
| 148 | .unwrap_or(Duration::from_secs(300)), |
| 149 | )); |
| 150 | |
| 151 | let invalidation_strategy = match &config.invalidation_strategy { |
| 152 | super::cache_config::InvalidationStrategy::Manual => { |
| 153 | super::invalidation::InvalidationStrategy::Manual |
| 154 | } |
| 155 | super::cache_config::InvalidationStrategy::Ttl => { |
| 156 | super::invalidation::InvalidationStrategy::Ttl { |
| 157 | default_ttl: Duration::from_secs(3600), |
| 158 | max_ttl: Duration::from_secs(7200), |
| 159 | } |
| 160 | } |
| 161 | super::cache_config::InvalidationStrategy::TagBased => { |
| 162 | super::invalidation::InvalidationStrategy::TagBased { |
| 163 | sensitive_tags: [ |
| 164 | "nodes".to_string(), |
| 165 | "edges".to_string(), |
| 166 | "schema".to_string(), |
| 167 | ] |
| 168 | .into_iter() |
| 169 | .collect(), |
| 170 | propagation_delay: Duration::from_millis(100), |
| 171 | } |
| 172 | } |
| 173 | super::cache_config::InvalidationStrategy::Versioned => { |
| 174 | super::invalidation::InvalidationStrategy::Versioned { |
| 175 | track_data_version: true, |
| 176 | track_schema_version: true, |
| 177 | } |
| 178 | } |
| 179 | super::cache_config::InvalidationStrategy::Hybrid { |