redis-RDB和AOF对比总结

RDB和AOF对比

RDB和AOF是redis用于持久化数据的两种主要方式,由于redis是内存数据库,所以一旦断电数据就会丢失,这时就需要采用RDB和AOF来保证数据丢失之后得以恢复。

对比RDBAOF
持久化什么redis的键值对更新命令
崩溃之后的恢复速度数据还原速度快(读取之后直接恢复)数据还原速度慢(需要重新执行写命令
使用情况默认开启开启则优先使用
落盘时机分钟级别每秒保存或每条命令保存
数据量由于保存的是当前的所有数据即快照,所以数据量会比较大只保存最新的更新命令,所以数据量较小

AOF和RDB如何选择

如果允许分钟级别的数据丢失,可以选择使用RDB;

如果对数据丢失非常严格,使用AOF,优先使用每秒保存,因为它在可靠性和性能之间取了一个平衡。

AOF持久化的三种实现方式

  • Always
    同步写回:每个写命令执行完,立马同步地将日志写回磁盘;
    写入效率最慢,但是最安全,不会丢数据

  • Everysec
    每秒写回:每个写命令执行完,先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;这个同步操作是由一个线程专门负责的。
    写入足够快,也比较安全,只会丢失一秒钟的数据

  • No
    操作系统控制的写回:每个写命令执行完,先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。
    性能开销最小,但是丢失的数据也最多。

三种方式如何选择
想要获得高性能,就选择No策略;
如果想要得到高可靠性保证,就选择Always策略;
如果允许数据有一点丢失,又希望性能别受太大影响的话,那么就选择Everysec策略。

混合使用AOF和RDB

先看全量快照和增量快照

  • 全量快照
    对所有的数据做一个快照
  • 增量快照
    做了一次全量快照后,后续的快照只对修改的数据进行快照记录,而不是所有的数据做快照。

Redis 4.0中提出了一个混合使用AOF日志和rdb快照的方法。
简单来说,内存快照以一定的频率执行,在两次快照之间,使用AOF日志记录期间的所有命令操作。

如下图所示,T1和T2时刻的修改,用AOF日志记录,等到第二次做全量快照时,就可以清空AOF日志,因为此时的修改都已经记录到快照中了,恢复时就不再用日志了。
在这里插入图片描述
这样一来,快照不用很频繁地执行,这就避免了频繁fork对主线程的影响。而且,AOF日志也只用记录两次快照间的操作,也就是说,不需要记录所有操作了,因此,就不会出现文件过大的情况了,也可以避免重写开销。
所以,这个方法既能享受到RDB文件快速恢复的好处,又能享受到AOF只记录操作命令的简单优势,颇有点“鱼和熊掌可以兼得”的感觉,建议在实践中用起来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值