← Workflows

阅读中文版本

Cache Hit Ratio Optimization Workflow

Measure hit ratio by key class, diagnose misses by type (cold, capacity, or invalidation), and apply the fix matched to the miss pattern.

intermediate~30 minperformance-tuningcachinglatency

Objective

Raise the effective hit ratio by classifying misses and fixing the dominant class, rather than blanket-raising TTLs or capacity.

Environment

  • Cache with hit or miss metrics per key (or addable logging)
  • Key-space size data and access distribution
  • Control over TTL, eviction policy, and capacity

Steps

1. Instrument hit ratio by key class

Break the aggregate hit ratio into classes (hot entities, query results, sessions), since each class has different miss causes and value.

Expected state: Per-class hit ratios exist with traffic weights.

2. Classify the misses

Attribute misses within each class: cold (first request for a key), capacity (evicted before reuse), or invalidation (flushed or expired between accesses).

Expected state: Miss counts exist per type per class.

3. Fix the dominant miss type

Apply the matched fix: cold gets warming or stale-while-revalidate, capacity gets sizing or better eviction, invalidation gets smarter key versioning or shorter critical sections.

Expected state: The dominant miss type drops measurably after its fix.

4. Target the top keys explicitly

Identify the highest-traffic keys and guarantee their residency: pin them, warm them on deploy, or extend their TTL where correctness allows.

Expected state: The top keys show near-permanent hit rates.

5. Verify latency and origin load together

Confirm the hit-ratio gain translated into user-visible latency and reduced origin load, closing the loop from ratio to outcome.

Expected state: p99 latency and origin request rate both improved with the ratio.

Expected outcome

Cache hit ratio improved by fixing the actual miss classes, with top keys guaranteed resident and the gain verified in latency and origin load.

Verification

Per-class hit ratios rose with miss-type evidence; origin request volume dropped proportionally; p99 on cached paths improved.

Aggregate hit ratio hides three different diseases

A 92 percent hit rate can mean cold misses on a growing keyspace, capacity evictions on hot keys, or invalidation churn wiping rows between uses. Each has a different fix, and blanket TTL raises or capacity bumps treat none of them specifically.

hit ratio by class (weighted by traffic):
  product_query   94% hit   (61% of traffic)   dominant
  user_session    98% hit
  search_results  71% hit   <- worst

miss classification (search_results):
  cold            9%   (novel queries, fine)
  capacity       62%   <- evicted before reuse
  invalidation   29%   (TTL 60s < avg reuse 3m)

fixes (matched):
  capacity: maxmemory-policy allkeys-lru ->
            volatile-lru + size 2GB -> 6GB
            (top-keys pinned)
  invalidation: TTL 60s -> 180s (staleness ok:
            price tolerance 5 min, agreed w/ product)

after: search hit 71% -> 93%
  origin search load: -58%   p99: 610 -> 240ms

Invalidation TTL must match reuse interval

A TTL shorter than the average reuse interval is a self-inflicted wound: every second access is a miss by construction. The fix is not more capacity but TTL calibrated to the access pattern and the data’s actual staleness tolerance, agreed with whoever owns correctness.

Pin what cannot be evicted

Under memory pressure, even LRU can evict a hot key during a burst of cold traffic. For the few keys whose miss is most expensive (the top products, the config blob), explicit pinning or a no-eviction class turns their hit rate into a guarantee rather than a statistic.