Redis的RDB快照

AOF(Append On File)方法,每次执行只需要记录操作命令,每次需要持久化的数据量不大。只要采用的不是always的持久化策略,就不会对性能造成太大影响。也正因为记录的是操作命令,而不是实际的数据,所以,用AOF方法进行故障恢复时,需要逐一把命令都执行一遍。如果操作日志非常多,Redis就会恢复得很缓慢,影响正常使用。而RDB(Redis DataBase)日志文件记录的是内存快照,就是指内存中的数据在某一时刻的状态记录。

RDB文件是什么?

Redis的数据都在内存中,为了提供所有数据的可靠性,它执行的是全量快照,也就是把内存中的所有数据都记录到磁盘中。

RDB文件的生成?

Redis提供了两个命令来生成RDB文件:

  • save:在主线程中执行,会导致阻塞
  • bgsave:创建一个子进程,专门用于写入RDB文件,避免了主线程的阻塞,这也是Redis RDB文件生成的默认配置

RDB文件的生成流程?

Redis借助操作系统提供的写时复制(copy on write),在执行快照的同时,正常处理读写操作。这里的操作和操作AOF文件重写是一样的,但是AOF文件写完之后会提示主线程,并对在重写期间的写操作进行追加。而RDB文件不做追加。详情可以点击以下连接Redis的AOF日志

RDB文件的细节?

  1. 虽然bgsave执行不阻塞主线程,但如果频繁地执行全量快照,会带来两方面的开销。1、磁盘压力变大 2、主进程fork子进程这个创建过程本身会阻塞主进程,而且内存中数据量越大,阻塞时间越大。
  2. Redis4.0中提出混合使用AOF日志和内存快照的方法。设置的参数:aof-use-rdb-preamble:yes。

RDB文件与AOF文件的优缺点?

  • AOF:恢复数据时间与记录的命令成正比相关。相比于RDB文件的恢复,AOF恢复时是一条命令一条命令地执行。
  • RDB:快照对磁盘和内存开销大,不能频繁记录。相比于RDB文件的一次fork子进程写文件相比,AOF对文件的写操作分散在每次命令执行完后。而AOF日志的重写也不会很频繁。

RDB和AOF的选择问题?

  • 数据不能丢失时,内存快照和AOF的混合使用是个很好的选择。
  • 如果允许分钟级别的数据丢失,可以只使用RDB。
  • 如果只能AOF,优先使用everysec的配置选项,因为它在可靠性和性能之间取了一个平衡。

混合使用AOF日志和内存快照?

在Redis4.0以前,RedisAOF的重写机制是指令整合,也就是这里的重写Redis的AOF日志。但在Redis4.0之后,Redis的AOF重写的时候就直接把RDB的内容写到AOF文件开头,将增量的以指令的方式Append到AOF文件。

  • 优点:快速加载,同时避免丢失过多数据。
  • 缺点:AOF里面的RDB部分就是压缩格式不再是AOF格式,可读性差。

Redis4.0之后在读取AOF文件怎么判断RDB数据?

查看是否以REDIS开头。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值