RDB快照(snapshot)
(1)Redis将内存数据库快照保存dump.rdb的二进制文件中
(2)Redis将内存flush到磁盘文件的默认策略:
N秒内数据集至少有M个改动
(3)Redis允许手动flush,重新生成rdb文件并覆盖旧rdb,命令:
save或
bgsave
(4)Redis默认采用的是bgsave方式备份,save和bgsave对比如下:
命令 | save | bgsave |
IO类型 | 同步 | 异步 |
是否阻塞redis其他命令 | 是 | 否 |
优点 | 不会消耗额外内存 | 不阻塞客户端命令 |
缺点 | 阻塞客户端命令 | 需要fork子进程,消耗内存 |
Redis在执行bgsave时,主线程会fork一个basave子进程,共享主线程的所有内存数据,所以不会阻塞客户端命令
AOF(append-only file)
(1)Redis将客户端执行的
修改命令采用resp协议格式写入appendonly.aof中
(2)Redis执行fsync的默认策略:
appendfsync alawys:每次有新命令追加到AOF文件时就执行一次 fsync,最慢最安全
appendfsync everysec:每秒fsync一次,兼具性能与安全,最多丢失1秒数据
appendfsync no:从不fsync,最快最不安全
(3)Redis会重写aof文件,默认策略:
auto‐aof‐rewrite‐min‐size 64mb:aof文件大小大于64M
auto‐aof‐rewrite‐percentage:较上次重写后的aof文件大小增长100%
(4)Redis可以使用bgrewirteaof手动触发aof文件重写,类似bgsave,fork子进程执行
RDB与AOF对比
命令
| RDB | AOF |
启动优先级
| 低 | 高 |
体积 | 小 | 大 |
恢复速度
| 快 | 慢 |
数据安全性
| 容易丢失数据 | 依据策略决定 |
Redis混合持久化
重启Redis时,由于RDB容易丢数据,而AOF恢复速度慢,所以Redis支持RDB+AOF混合持久化。
(1)Redis支持混合持久化,前提是必须开启AOF
aof‐use‐rdb‐preamble yes
(2)Redis在进行AOF重写时,会先将整个内存库进行RDB快照处理,并将增量的AOF修改内容一起写入新的AOF文件中
Redis数据备份策略
- 写crontab定时调度脚本,每小时都copy一份rdb或aof的备份到一个目录中去,仅仅保留最近48小时的备份
- 每天都保留一份当日的数据备份到一个目录中去,可以保留最近1个月的备份
- 每次copy备份的时候,都把太旧的备份给删了
- 每天晚上将当前机器上的备份复制一份到其他机器上,以防机器损坏