Redis persistence.
RDB (snapshots)
save 900 1 # if >=1 changes in 900s
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
Periodic full snapshots. Fast to load. Some data loss possible.
AOF (append-only file)
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec # always | everysec | no
always: fsync each write (durable, slow).everysec: fsync every second (default; lose ≤1s).no: OS decides (fastest, riskiest).
AOF rewrite
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
Periodically rewrites to smaller file.
Hybrid (RDB inside AOF)
aof-use-rdb-preamble yes
Best of both: fast load (RDB) + recent durability (AOF).
Commands
BGSAVE # async RDB
BGREWRITEAOF # async AOF rewrite
LASTSAVE
Recovery order
If AOF + RDB both exist:
- Redis loads AOF (more recent).
If AOF off, loads RDB.
Backups
# Copy dump.rdb regularly
cp /var/lib/redis/dump.rdb /backup/dump-$(date +%F).rdb
# Compress
zstd -19 dump.rdb
For AOF: copy after rewrite (consistent state) or rsync continuously.
Replication ≠ backup
Replicas mirror primary, including DELETEs. Bug deletes data → all replicas lose it. Always have backups.
Diskless replication
repl-diskless-sync yes
repl-diskless-sync-delay 5
Stream RDB directly to replica without writing to disk.
Disable persistence (cache-only)
save ""
appendonly no
For pure cache where data loss OK.
Common mistakes
- Disabling persistence then using as primary store.
- AOF
appendfsync alwayson busy server → slow. - No backups, relying on replica.
- Disk full → fork() fails on save.
- Long fork on huge dataset → latency spike.
Read this next
If you want my Redis persistence setup, it’s at rajpoot.dev .
Building something AI-, backend-, or data-heavy and want a second pair of eyes? I do consulting and freelance work — see my projects and ways to reach me at rajpoot.dev .