Persistence
Redis Database Backup
- RDB (Redis Database Backup) is one of the two main persistence mechanisms in Redis (the other is AOF).
- It works by taking point-in-time snapshots of your dataset and saving them to disk as a binary file (
dump.rdb). - These snapshots can later be loaded when Redis restarts → ensuring data durability.
Think of it like taking a photo of your data at specific intervals.
How RDB Works
- When certain conditions are met, Redis forks a background process.
- This process writes the entire dataset from memory into an RDB file (
dump.rdb). - Redis keeps serving clients during this snapshot (thanks to forking).
Configuring RDB in redis.conf
-
Automatic Snapshots
Defined using save rules:
save 900 1 # Snapshot if 1 key changed in 900 seconds (15 min)
save 300 10 # Snapshot if 10 keys changed in 300 seconds (5 min)
save 60 10000 # Snapshot if 10000 keys changed in 60 seconds- Format:
save <seconds> <changes> - You can define multiple rules.
- To disable RDB snapshots:
save "" - Format:
-
RDB File Settings
dbfilename dump.rdb # Default snapshot file name
dir /var/lib/redis/ # Directory to save RDB files -
Manual Snapshots
You can force snapshots with commands:
SAVE→ Creates snapshot in main thread (blocks clients).BGSAVE→ Forks a background process (non-blocking, preferred).
127.0.0.1:6379> BGSAVE
Background saving startedThe file
dump.rdbwill be created in your Redis data directory.
Performance Considerations
Advantages of RDB
- Compact binary format → good for backups & replication.
- Faster recovery time compared to AOF.
- Low overhead during normal operations (most work is done in background).
Drawbacks
- Data loss risk → since snapshots happen at intervals, any changes after the last snapshot may be lost if Redis crashes. (e.g., if snapshot every 5 minutes, and crash happens after 4 minutes, you lose last 4 minutes of data).
- Forking can be expensive for very large datasets (can cause CPU + memory spikes).
Append Only File
- AOF (Append Only File) is a persistence method where every write operation Redis executes is logged to a file.
- Instead of taking snapshots (like RDB), Redis appends commands to a log file (
appendonly.aof). - On restart, Redis replays the log to rebuild the dataset.
Think of it as a black box recorder — every change is stored so nothing is lost.
Configuring AOF in redis.conf
-
Enable AOF
appendonly yes
appendfilename "appendonly.aof" -
Sync Policy (
appendfsync)This controls how often Redis writes AOF changes to disk:
appendfsync always # Write every command to disk immediately (safest, slowest)
appendfsync everysec # Default: write once per second (good balance)
appendfsync no # Let OS decide when to flush (fastest, risky)Most production systems use
everysec. -
Rewrite Policy
Since AOF keeps growing, Redis rewrites the log periodically to compact it. Settings:
auto-aof-rewrite-percentage 100 # Rewrite when AOF file is 100% larger than last rewrite
auto-aof-rewrite-min-size 64mb # Minimum file size before rewriting
Recovery with AOF
When Redis restarts:
- It reads the AOF file.
- Replays the commands one by one.
- Reconstructs the dataset in memory.
This guarantees minimal data loss (at most 1 second if using everysec).
Commands for Managing AOF
- Rewrite AOF manually:
BGREWRITEAOF. Creates a new compact AOF file in the background. - Check AOF status:
CONFIG GET appendonly - Enable AOF at runtime:
CONFIG SET appendonly yes
Hybrid Persistence
- Redis originally supported RDB (snapshots) and AOF (append-only file) separately.
- Since Redis 4.0, a hybrid persistence mode was introduced.
- It stores a binary RDB snapshot (fast to reload) plus AOF logs (for recent changes).
Think of it as:
- Take a photo (RDB) of the dataset → fast to recover.
- Record the video (AOF) of changes after that snapshot → durable with minimal data loss.
The combined persistence file is written to AOF.
How Hybrid Persistence Works
-
Redis periodically creates RDB snapshots.
-
Instead of writing only commands to AOF, Redis writes:
- The latest RDB snapshot (as binary dump).
- Plus incremental AOF commands since that snapshot.
-
On restart, Redis:
- Loads the RDB part (fast load).
- Replays the AOF portion (ensures recent durability).
Configuring Hybrid Persistence
In redis.conf, enable AOF persistence and allow RDB preamble:
appendonly yes
aof-use-rdb-preamble yes
appendfsync everysec
appendonly yes→ Enables AOF logging.aof-use-rdb-preamble yes→ Hybrid persistence ON (default since Redis 4.0).appendfsync everysec→ Sync once per second (balance durability + performance).
Check AOF File
Open appendonly.aof → you’ll see it begins with an RDB binary block, followed by AOF commands:
<binary RDB data>
*3
$3
SET
$6
user:2
$6
Billah
The first part is RDB, the rest are AOF commands.
Restart Redis
sudo systemctl restart redis-server
Redis reloads:
- RDB portion (fast load of bulk data).
- AOF portion (applies latest changes).
Performance
Advantages of Hybrid Persistence
- Faster restart than pure AOF (thanks to RDB snapshot).
- More durable than pure RDB (thanks to AOF tail).
- Smaller AOF files (since bulk dataset is stored as RDB).
Drawbacks
- Slightly more complex than pure RDB or AOF.
- Still some performance overhead compared to RDB-only.
Backup & Restore Strategies
Restore from RDB
- Stop Redis server:
sudo systemctl stop redis-server
- Replace the current
dump.rdbwith your backup:
cp /backups/dump-2025-09-04.rdb /var/lib/redis/dump.rdb
- Restart Redis:
sudo systemctl start redis-server
- Verify:
redis-cli GET user:1
Restore from AOF
- Stop Redis:
sudo systemctl stop redis-server
- Replace
appendonly.aofwith your backup:
cp /backups/appendonly-2025-09-04.aof /var/lib/redis/appendonly.aof
- Restart Redis → Redis will replay all commands from AOF.
Restore from Hybrid Persistence
- Stop Redis.
- Copy backup AOF (with RDB preamble) into place.
- Restart Redis → it loads the RDB snapshot, then replays the AOF tail.
Example Workflow of Backup
Backup (Daily RDB Backup with Cron)
0 2 * * * redis-cli BGSAVE && cp /var/lib/redis/dump.rdb /backups/dump-$(date +\%F).rdb
Runs every day at 2 AM.
Restore
sudo systemctl stop redis-server
cp /backups/dump-2025-09-04.rdb /var/lib/redis/dump.rdb
sudo systemctl start redis-server