Cache Observability
Cache is performance-critical. Track hit rate, latency, and evictions.
Key Metrics
| Metric | Type | Description |
|---|---|---|
cache.hits | Counter | Successful reads |
cache.misses | Counter | Reads that missed |
cache.gets.duration | Histogram | GET latency |
cache.evictions | Counter | Keys evicted |
cache.memory.used | Gauge | Memory consumption |
Span Attributes
| Attribute | Example | Required |
|---|---|---|
cache.system | redis, memcached | Yes |
cache.operation | GET, SET | Yes |
cache.hit | true/false | Yes |
cache.key_prefix | user:* | Recommended (not full key!) |
Hit Rate
code
hit_rate = cache.hits / (cache.hits + cache.misses)
- •Good: >90%
- •Concerning: <80% → Check TTL, warming strategy
Issues to Detect
| Issue | Detection | Fix |
|---|---|---|
| Low hit rate | <80% | Tune TTL, warm cache |
| Cache stampede | Many misses for same key | Distributed locks |
| High latency | p99 >10ms | Check network, value size |
| Memory pressure | memory >90% of max | Eviction policy, sizing |
Cache Wrapper Pattern
code
Before GET: Start timer After GET: Record duration, increment hits or misses, set cache.hit on span
Anti-Patterns
- •Full keys in metrics → High cardinality, use prefix only
- •No eviction monitoring → Can't detect memory pressure
- •Ignoring serialization time → Track total time including marshal
References
- •
references/platforms/{platform}/cache.md