Redis-持久化

RDB快照(snapshot)

(1)Redis将内存数据库快照保存dump.rdb二进制文件中
(2)Redis将内存flush到磁盘文件的默认策略: N秒内数据集至少有M个改动
(3)Redis允许手动flush,重新生成rdb文件并覆盖旧rdb,命令: savebgsave
(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-持久化_第1张图片

Redis数据备份策略

  1. 写crontab定时调度脚本,每小时都copy一份rdb或aof的备份到一个目录中去,仅仅保留最近48小时的备份
  2. 每天都保留一份当日的数据备份到一个目录中去,可以保留最近1个月的备份
  3. 每次copy备份的时候,都把太旧的备份给删了
  4. 每天晚上将当前机器上的备份复制一份到其他机器上,以防机器损坏

你可能感兴趣的:(Redis,redis)