Definition · Hit rate and miss rateFor a stream of requests arriving at rate λ, the hit rate h is the fraction served from the cache and the miss rate 1 − h is the fraction forwarded. The backend load is (1 − h)λ, in the same units as λ.
The two rates are one number written two ways. Which one you write down decides what the sentence is about: h is about the cache, 1 − h is about everything behind it.
There is no model in that definition and no assumption to argue with. It is a split of a rate into two parts, and it is exact whenever the hit rate is measured over the same window as the arrival rate. What it is not is stable: h is a property of the workload and the cache together, and a change in either moves it.
Example · Ten thousand requests a second at a ninety per cent hit rateλ = 10 000 rps and h = 90%. The cache absorbs (9/10)(10 000) = 9 000 rps and the backend receives (1/10)(10 000) = 1 000 rps. Against a backend that can serve μ = 2 000 rps that is ρ = 1 000/2 000 = 1/2, so the backend is busy half the time.
One more nine is a factor, not a gain
Take the same λ and improve the cache. At h = 95% the backend receives (1/20)(10 000) = 500 rps: the hit rate went up by five points and the backend’s work halved. At h = 99% it receives 100 rps, a tenth of what it received at 90%. Nothing about the backend improved by nine per cent.
backend at h₂ (1 − h₂)λ 1 − h₂
─────────────── = ───────── = ───────
backend at h₁ (1 − h₁)λ 1 − h₁
h₁ = 90%, h₂ = 95% (1/20)/(1/10) = 1/2 half the load
h₁ = 90%, h₂ = 99% (1/100)/(1/10) = 1/10 a tenth of the load
The λ cancels, which is why the factor is a property of the two hit rates alone. It is also why the same percentage point is worth wildly different amounts at different places on the scale: 50% to 51% divides the backend load by 50/49, about two per cent, while 98% to 99% divides it by two.
Example · The same cache, four waysAt λ = 10 000 rps into a backend of μ = 2 000 rps: h = 90% leaves 1 000 rps and ρ = 1/2; h = 95% leaves 500 rps and ρ = 1/4; h = 99% leaves 100 rps and ρ = 1/20; h = 99.9% leaves 10 rps and ρ = 1/200. The hit rates in that list are nearly the same number. The utilisations differ by a factor of a hundred.
The utilisation is the thing you were actually buying
Backend load on its own does not tell you what the backend feels. “The M/M/1 Queue” gives the mean wait at a rational utilisation as W = 1/(μ − λ), and on these four rows that is 1.00 ms, 0.67 ms, 0.53 ms and 0.50 ms. Notice how little the last two moved: past the knee, further hit rate buys almost nothing, because the queue was already nearly empty. “The Knee: Response Time vs Utilisation” is the curve that says which side of it you are on.
So a cache is worth the most exactly where the backend is worst. Going from ρ = 0.95 to ρ = 0.5 is the difference between a system that falls over and one that does not; going from ρ = 0.05 to ρ = 0.005 is the difference between two numbers nobody can feel. The hit rate is the lever and the utilisation is the load, and it is the load you should be looking at.
Two cautions before the lab. First, (1 − h)λ is the average backend rate, and the backend’s bad moments are not averages — a hot key expiring sends a burst through that this formula does not see, which is what Cache Stampedes is for. Second, the hit rate is measured, not chosen: writing 99% into a capacity plan is a forecast about a workload, and it deserves the error bar Capacity Estimation taught you to carry.