At a glance
The number of minutes since Redis last wrote a successful RDB snapshot to the node’s own disk. RDB is Redis’s point-in-time snapshot file (dump.rdb): a compact, forked copy of the entire dataset taken on a schedule or on demand. This card answers “if the Redis process restarted right now, how much recent data would it have to reconstruct on startup”. It is the local-durability counterpart to the offsite backup card: a fresh RDB save protects you from a process crash; it does not protect you from losing the whole node.
| What it tracks | Minutes elapsed since rdb_last_save_time, the Unix timestamp of the last successful RDB save (scheduled save rule, manual BGSAVE, or SAVE). |
| Data source | rdb_last_save_time from INFO persistence, cross-checked against rdb_last_bgsave_status (ok or err) and rdb_bgsave_in_progress. |
| Time window | RT (real-time, re-evaluated on every Nerve Centre poll, typically every 60 seconds). |
| Alert trigger | > 60m. If no successful RDB save has completed in the last 60 minutes, the card turns amber/red. |
| Units | Minutes (integer, rounded down). 0 means a save completed within the last minute. |
| What counts | A BGSAVE (or blocking SAVE) that completed with rdb_last_bgsave_status = ok. |
| What does NOT count | (1) A BGSAVE still in progress (rdb_bgsave_in_progress = 1); (2) a save that failed (rdb_last_bgsave_status = err, usually fork or disk failure); (3) AOF writes, which are tracked separately; (4) the offsite copy, which the Backup card tracks. |
| Roles | owner, dba, platform, sre |
Calculation
The card subtracts the last successful RDB save timestamp from “now”:rdb_last_save_time is reported directly by INFO persistence as a Unix epoch and is identical to what redis-cli LASTSAVE returns. It updates only when a save completes successfully. The engine reads two companion fields to qualify the value:
rdb_last_bgsave_status. If this iserr, the last save attempt failed (typically the fork failed for lack of memory, or the disk was full or read-only). In that case the timestamp may be stale even though Redis “tried”, so the card surfaces the failure rather than just an ageing counter.rdb_bgsave_in_progress. If a save is currently running, the age keeps climbing until that save lands; an in-progress save does not pre-emptively reset the clock.
save configuration directive (for example save 900 1 300 10 60 10000, meaning save after 900s if at least 1 key changed, after 300s if 10 changed, after 60s if 10,000 changed). A quiet instance with few writes may legitimately go a long time between saves under those rules; that is expected behaviour, not necessarily a fault, which is why the alert is tunable.
Worked example
A DBA manages a Redis 7.0 instance backing a product-recommendation service. Thesave directive is the default save 3600 1 300 100 60 10000. RDB is the only persistence mechanism (AOF is off). Snapshot taken on 22 Mar 26 at 14:20 UTC.
| Signal | Value | Source |
|---|---|---|
rdb_last_save_time | 22 Mar 26 13:02 UTC | INFO persistence |
rdb_last_bgsave_status | ok | INFO persistence |
rdb_bgsave_in_progress | 0 | INFO persistence |
rdb_last_cow_size | 612 MB | INFO persistence |
| Card headline | 78 minutes ago | computed |
- The last save succeeded, but cadence has slowed. Status is
ok, so nothing failed; the instance simply has not crossed asaverule in 78 minutes. Under the default rules, that means fewer than 100 keys changed in any 300-second window and fewer than 10,000 in any 60-second window since 13:02. For a recommendation cache during a quiet afternoon, that is plausible. - The exposure is 78 minutes of writes. If the process restarts now, it reloads
dump.rdbfrom 13:02 and loses any keys written since. For a recompute-on-miss cache that is harmless (the service repopulates). If this instance also held anything not recomputable, 78 minutes would be a real loss window. - Copy-on-write memory is healthy.
rdb_last_cow_sizeof 612 MB tells the DBA the fork’s copy-on-write footprint during the last save was moderate, so the save is not at risk of a fork failure from memory pressure. Worth watching alongside Memory Used vs Maxmemory % because a near-full instance can fail to fork.
- A high reading is not automatically a fault. RDB saves are write-driven by the
saverules. A quiet instance saving infrequently is behaving as configured. Read the value against the importance of the data, not as a universal alarm. - Watch the status field, not just the age. An ageing counter with status
okis a cadence question. An ageing counter with statuserris a failure: the fork or disk is broken and no new snapshot is being written at all. The card surfaces both, but they demand different responses. - RDB protects against restart, not node loss. A fresh
dump.rdblets Redis recover quickly after a process crash. It does nothing if the disk or VM is lost. Always pair this with Last Successful Backup (hours ago), which tracks the offsite copy.
Sibling cards DBAs should reference together
| Card | Why pair it with Last RDB Save | What the combination tells you |
|---|---|---|
| Last Successful Backup (hours ago) | RDB save is local; backup is offsite durability. | Fresh RDB save plus stale offsite backup equals a broken shipping job, not a Redis fault. |
| Last AOF Rewrite Status | The other persistence mechanism. | If RDB saves are failing, a healthy AOF is your fallback recovery point, and vice versa. |
| Memory Used vs Maxmemory % | BGSAVE forks; a near-full instance can fail to fork. | High memory plus rdb_last_bgsave_status = err usually equals fork failing for lack of headroom. |
| Memory Fragmentation Ratio | Fragmentation and copy-on-write both pressure RSS during a save. | A save can spike RSS; high fragmentation makes that spike more dangerous. |
| Redis Health Score | The composite that folds save freshness into overall health. | A failing RDB save drags the score even when latency looks fine. |
| Operations per Second (live) | High write throughput drives save cadence under the save rules. | High ops with stale saves can mean reads dominate, or the save rules are too loose for the write rate. |
Reconciling against the source
Where to look in Redis’s own tooling:Why our number may legitimately differ from what you see:redis-cli LASTSAVEreturns the exact Unix timestamp this card is built on. Convert it and compare.INFO persistencefor the full picture:rdb_last_save_time,rdb_last_bgsave_status,rdb_bgsave_in_progress,rdb_changes_since_last_save(how many writes are unsaved), andrdb_last_cow_size.CONFIG GET saveto see the active save rules governing automatic cadence. The Redis log (path fromCONFIG GET logfile) forBackground saving started/Background saving terminated with successlines, and any fork-failure errors.
| Reason | Direction | Why |
|---|---|---|
| In-progress save | Vortex IQ shows older | A running BGSAVE does not reset the clock until it completes; LASTSAVE will jump only when it lands. |
Manual SAVE vs BGSAVE | Either | Both update the timestamp; a blocking SAVE you ran by hand will reset the card the same as a scheduled BGSAVE. |
| Time zone | Display only | The epoch is UTC; Vortex IQ computes the gap in UTC and renders age in your profile time zone. |
| Polling interval | Up to ~1 min | The card re-reads on poll; a save in the last few seconds may show on LASTSAVE before the next Vortex IQ poll. |
| Card | Expected relationship | What causes divergence |
|---|---|---|
redis.last-successful-backup-hours-ago | Local save should be fresher than the offsite copy. | If local is fresh but offsite is stale, the shipping job is broken, not Redis. |
INFO persistence:rdb_changes_since_last_save | A large unsaved-changes count alongside a high age means real exposure. | Many unsaved changes plus high age equals a meaningful loss window on restart. |
Known limitations / FAQs
This card reads 4 hours but Redis seems totally healthy. Is something wrong? Probably not. RDB saves are triggered by thesave rules, which are write-volume based. A quiet instance can legitimately go hours without crossing a rule. Run CONFIG GET save to see the rules and INFO persistence to read rdb_changes_since_last_save: if few keys have changed, the long gap is expected. If the gap matters for your data, tighten the rules or raise the alert threshold rather than treating it as a fault.
What is the difference between this card and the offsite Backup card?
This card measures the last RDB save to the node’s own local disk. The Backup card measures the last copy that reached offsite storage. A local save survives a Redis process restart; only an offsite copy survives losing the node, disk, or region. You want both fresh: a tight RDB save age for fast local recovery and a tight backup age for disaster recovery.
The status is err. What does that mean and what do I do?
rdb_last_bgsave_status = err means the last save attempt failed. The two usual causes are (1) the fork failed because the OS could not allocate the copy-on-write memory (the instance is near full, or vm.overcommit_memory is not set to 1 on Linux), and (2) the disk is full or read-only. Check the Redis log for the exact error, free disk or memory, and confirm vm.overcommit_memory=1. Until a save succeeds, your local recovery point keeps ageing.
We only use AOF, not RDB. Should I ignore this card?
If RDB is genuinely disabled (save "" and no dump.rdb), this card may read a very high value or reflect the timestamp of an old snapshot. In that case the relevant durability signal is Last AOF Rewrite Status, and you can lower the priority of this card in the Sensitivity tab. Many teams run both RDB and AOF; if you do, keep both cards green.
Does running a manual BGSAVE reset the alert?
Yes. Any successful save, scheduled or manual, blocking SAVE or background BGSAVE, updates rdb_last_save_time and resets the card. Forcing a BGSAVE is a valid way to clear a transient amber reading, but if the underlying cadence is too slow for your data, fix the save rules rather than relying on manual saves.
Why does a BGSAVE sometimes spike memory and latency?
BGSAVE forks the Redis process. The child shares memory with the parent via copy-on-write, so during the save any keys the parent modifies trigger page copies, growing RSS. On a write-heavy, near-full instance this can spike memory (watch Memory Used vs Maxmemory %) and briefly raise latency. rdb_last_cow_size in INFO persistence quantifies that copy-on-write footprint from the last save.