Cache Invalidator Agent
The Cache Invalidator Agent handles intelligent cache invalidation strategies to maintain data consistency across the platform.
π Overviewβ
| Property | Value |
|---|---|
| Module | src.agents.cache.cache_invalidator_agent |
| Class | CacheInvalidatorAgent |
| Author | Nguyen Viet Hoang |
| Version | 1.0.0 |
π― Purposeβ
Cache invalidation ensures data consistency by:
- Removing stale data when source data changes
- Propagating updates across distributed cache nodes
- Maintaining consistency between cache and database
- Optimizing memory by removing unused entries
π§ Invalidation Strategiesβ
Time-Based Invalidation (TTL)β
# Set TTL during caching
cache.set("camera:CAM_001", data, ttl=300) # Expires in 5 minutes
Event-Based Invalidationβ
# Invalidate on data change event
invalidator.on_entity_update("camera:CAM_001")
invalidator.on_entity_delete("camera:CAM_001")
Pattern-Based Invalidationβ
# Invalidate all matching keys
invalidator.invalidate_pattern("observation:*")
invalidator.invalidate_pattern("camera:CAM_00*")
Dependency-Based Invalidationβ
# Invalidate dependent caches
invalidator.invalidate_with_dependencies("camera:CAM_001", [
"observations:CAM_001:*",
"stats:CAM_001:*"
])
π Architectureβ
βββββββββββββββββββ
β Data Change β
β Event β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ βββββββββββββββββββ
β Invalidator βββββΆβ Cache Manager β
ββββββββββ¬βββββββββ βββββββββββββββββββ
β
ββββββ΄βββββ
βΌ βΌ
βββββββββ βββββββββ
β Redis β β Local β
β Cache β β Cache β
βββββββββ βββββββββ
π Usageβ
Basic Invalidationβ
from src.agents.cache.cache_invalidator_agent import CacheInvalidatorAgent
invalidator = CacheInvalidatorAgent()
# Invalidate single key
invalidator.invalidate("camera:CAM_001")
# Invalidate multiple keys
invalidator.invalidate_many([
"camera:CAM_001",
"camera:CAM_002"
])
# Invalidate by pattern
invalidator.invalidate_pattern("observation:2025-11-*")
Event-Driven Invalidationβ
# Subscribe to entity changes
invalidator.subscribe_to_changes([
"Camera",
"Observation",
"Accident"
])
# Handle change event
def on_camera_update(entity_id: str):
invalidator.invalidate(f"camera:{entity_id}")
invalidator.invalidate_pattern(f"observations:{entity_id}:*")
βοΈ Configurationβ
# config/cache_config.yaml
cache_invalidation:
enabled: true
# Invalidation strategies
strategies:
time_based:
default_ttl: 3600
camera_ttl: 300
observation_ttl: 60
event_based:
enabled: true
entity_types:
- Camera
- Observation
- Accident
- Congestion
pattern_based:
batch_size: 1000
scan_count: 100
π Metricsβ
| Metric | Description |
|---|---|
invalidations_total | Total invalidation operations |
invalidations_by_pattern | Pattern-based invalidations |
invalidation_latency | Average invalidation time |
cascade_invalidations | Dependency cascade operations |
π‘οΈ Best Practicesβ
1. Use Specific Keysβ
# Good: Specific key
invalidator.invalidate("camera:CAM_001:location")
# Avoid: Broad pattern
invalidator.invalidate_pattern("camera:*")
2. Batch Invalidationsβ
# Batch for better performance
invalidator.invalidate_many(key_list)
3. Log Invalidationsβ
# Enable audit logging
invalidator.set_audit_logging(True)
π Related Documentationβ
- Cache Manager Agent - Primary caching operations
- State Updater Agent - State change handling
- Entity Publisher Agent - Entity updates
See the complete agents reference for all available agents.