At a glance
The Redis Health Score is a single 0 to 100 composite that rolls up the signals a DBA or SRE would otherwise check across a dozenINFOfields: keyspace hit rate, memory headroom againstmaxmemory, eviction pressure, replication lag, persistence freshness, command latency, and connection saturation. It answers one question for a platform team at a glance: “is this Redis instance healthy enough to keep serving production right now, or does someone need to look?” A score of 90+ is a calm instance; 70 to 89 is “watch it”; below 70 means at least one subsystem is degraded and the headline drops to red.
Calculation
The score is a weighted average of normalised sub-scores. Each input is mapped to a 0 to 100 band, then multiplied by its weight, then summed. The mapping is deliberately non-linear at the edges so that a single critical breach (for example memory at 99% ofmaxmemory, or a cluster slot gap) can dominate and force the composite under 70 even when everything else is green.
norm() clamps to the 0 to 100 range. A subsystem with no data (for example persistence on a cache-only instance with save "" and AOF off) is excluded and its weight redistributed across the remaining inputs, so a pure cache node is not penalised for having no backups.
Worked example
A platform team runs a 3-node Redis 7.2 cluster behind a B2C storefront. Redis holds the session store, the catalogue cache, and a rate-limiter. Snapshot taken on 14 Apr 26 at 09:40 BST on the primary of shard 1.
The headline reads 94, green. The team does nothing. Now fast-forward to a flash-sale at 19:05 the same evening:
maxmemory, switch the eviction policy from noeviction to allkeys-lru if appropriate, or shed load. Three things this example shows:
- The composite degrades gracefully but one breach can dominate. A single subsystem cannot drag a healthy instance below 70 unless it is genuinely critical, because no single weight exceeds 0.20. It took two collapsed subsystems (memory and evictions) plus a hit-rate dip to cross the line. That is the design intent: avoid false pages, fire on real degradation.
- The score points you at the cause, not just the symptom. Always open the breakdown. “59” tells you to look; the contribution column tells you where.
- Read the 7-day trend, not just the live value. A score that sits at 88 all week and dips to 59 for one flash-sale hour is a capacity-planning signal, not an emergency. A score that has drifted from 94 to 78 to 71 over three days is a slow leak (often memory fragmentation or an unbounded key set) that will breach soon.
Sibling cards
Reconciling against the source
There is no native “health score” in Redis to reconcile against directly, the number is Vortex IQ’s composite. What you can reconcile is each input, so when the score moves you can confirm the cause against Redis’s own tooling. Where to look in Redis:Why our number may legitimately differ from a manual reading:INFO(orINFO stats,INFO memory,INFO replication,INFO persistence,INFO clients) for every primitive that feeds the score.redis-cli INFOdumps the lot.LATENCY HISTORY <event>andLATENCY LATEST(Redis 7+) for the command-latency input.SLOWLOG GET 10for the slow-command picture behind a latency-driven drop.CLUSTER INFOandCLUSTER SHARDSfor the cluster-integrity input on a clustered deployment.
Cross-connector reconciliation:
Known limitations / FAQs
The score is 88 but everything looks fine inINFO. Why is it not 100?
A perfect 100 is rare and usually means a freshly restarted, idle instance. A busy production node almost always carries some memory utilisation, some normal latency, and some connection count, each of which trims a few points off its weighted band. 88 to 95 is the healthy steady state for a working instance, not a problem.
My cache-only node has no persistence. Is it being marked down for that?
No. If the instance has save "" and AOF disabled, the persistence input is excluded and its 10% weight is redistributed across the remaining subsystems. A pure cache node is scored only on the things that matter to a cache (hit rate, memory, evictions, latency, connections).
The score dropped to 59 for one hour during a sale, then recovered to 92. Do I need to act?
That is a capacity-planning signal, not an incident to chase after the fact. The instance was genuinely degraded during the sale (likely memory plus evictions). The action is preventative: size maxmemory for peak, confirm the eviction policy is appropriate, and consider a read replica or a bigger node for the next sale. Use the 7-day trend to see how often it happens.
Can I change the weights?
Yes. Open the Alert Rules tab for the Redis profile and adjust the per-subsystem weights and the alert threshold. A team that does not use Redis for persistence might zero the persistence weight; a team whose Redis is latency-critical might raise the latency weight. The default weighting is tuned for a general session-plus-cache workload.
Why does my replica show a different score from my primary?
Each node is scored independently from its own INFO. A replica typically shows lower throughput, different memory, and (by definition) the replication input measures its own lag from the primary. They are different instances doing different work, so different scores are expected. This card shows the node you selected.
The score is below 70 but the alert did not page anyone.
Check three things: (1) the alert threshold has not been raised above 70 in the Alert Rules tab; (2) the on-call routing for the Redis profile is configured; (3) the dip lasted at least one full poll interval, sub-poll transients can show on the live gauge without crossing the alert’s sustain check. If all three are correct and it still did not page, the routing integration needs attention.
Does the score include the cluster bus or just the data plane?
For a clustered deployment, cluster integrity (slot coverage and node reachability from CLUSTER INFO) is folded into the replication/cluster input. A slot-coverage gap is treated as critical and forces the score down hard, because a gap means some keys are unreachable and commands on those slots fail. See Cluster Slot Coverage Gap.