redis的RDB和AOF持久化操作

如果你的redis没有做持久化的操作,那么当遇到灾难性的事故时,你就会丢失所有的数据,当你再想恢复redis中的数据时,就会非常困难;当你的redis做了持久化的操作,比如说定期将数据存放到一些云存储服务上,当你遇到redis宕机的情况,重启redis之后redis就会自动根据持久化数据文件中的数据,去恢复内存中的数据,继续对外提供服务,这就是redis持久化的意义。

  1. RDB和AOF两种持久化机制的简单概念

    RDB:每隔一段时间,生成redis内存中数据的一份完整的快照,对redis中的数据执行周期性的持久化。
    AOF:对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启的时候,可以通过回放AOF日志中的写入指令来重新构建整个数据集。
    补充:AOF的操作每次会先将数据写入到操作系统的os cache中,一小段时间后执行fsync操作再将os cache中的数据写入磁盘中,此时数据才算真正完成了备份。
    AOF还有一个日志的rewrite操作,redis中缓存的数据是有限的,数据会因为过期,LRU算法等原因被清除掉,这时appendonly.aof文件中就不需要保存这些已经没有的数据了,appendonly.aof文件只有一份,当数据不断增加到非常大的时候,会占用很多的磁盘空间。
    这时就需要rewrite操作了,rewrite操作可以确保AOF日志文件不会过大,保持跟redis内存数据量一致,rewrite操作大致分为几步:
    (1)redis fork一个子进程
    (2)子进程基于当前内存中的数据,构建日志,开始往一个新的临时的AOF文件中写入日志
    (3)redis主进程,接收到client新的写操作之后,在内存中写入日志,同时新的日志也继续写入旧的AOF文件
    (4)子进程写完新的日志文件之后,redis主进程将内存中的新日志再次追加到新的AOF文件中
    (5)用新的日志文件替换掉旧的日志文件

  2. RDB和AOF两种持久化机制的优缺点

    RDB持久化的优点:
    (1)RDB会生成多个dump.rdb文件,每个文件代表了某一个时间点的完整数据快照,所以RDB可以作为冷备份
    (2)RDB在写入的时候,对redis的性能影响非常小,只需要fork一个子进程去操作RDB持久化即可
    (3)数据恢复的时候,RDB的恢复速度更快,直接加载到内存中即可恢复数据,AOF则需要回放一条条的指令
    RDB持久化的缺点:
    (1)使用RDB恢复数据的话,因为RDB内存快照时根据一定时间生成的,所以最坏的情况下,在即将生成新的RDB文件之前redis宕机,则会丢这段时间内所有的数据
    (2)RDB在fork子进程生成快照文件时,若快照文件过大,则会导致redis的服务短暂的暂停,所以最好不要把RDB操作的间隔时间设置过长,防止快照文件过大影响redis性能

    AOF持久化的优点:
    (1)AOF持久化一般是1s执行一次fsync操作,所以最多只会丢失1s的数据,可以最大程度的保留完整的数据
    (2)AOF日志文件以append-only模式写入,所以没有任何磁盘寻址的开销,写入性能非常高,而且文件不容易破损,即使文件尾部破损,也很容易修复
    (3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。因为在rewrite操作的时候,会对其中的指导进行压缩,创建出一份需要恢复数据的最小日志出来。再创建新日志文件的时候,老的日志文件还是照常写入。当新的merge后的日志文件ready的时候,再交换新老日志文件即可
    (4)AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。比如某人不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条flushall命令给删了,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据
    AOF持久化的缺点:
    (1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大
    (2)AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件,虽然这时性能还是很高,但是还是会消耗一部分的性能
    (3)类似AOF这种较为复杂的基于命令日志/merge/回放的方式,比基于RDB每次持久化一份完整的数据快照文件的方式,更加脆弱一些,容易有bug
    (4)做数据恢复的时候,需要根据日志一条条恢复到redis中,速度较慢;而且做冷备的时候需要写脚本去执行,比较复杂,不适合做冷备

  3. RDB和AOF到底该如何选择

    (1)如果只使用RDB,那样会导致你丢失很多数据
    (2)如果只使用AOF,第一,AOF并不适合做冷备份; 第二,RDB生成的数据快照,更加健壮,可以避免AOF这种复杂的备份和恢复机制的bug
    (3)综合使用AOF和RDB两种持久化机制,用AOF来保证数据不丢失,作为数据恢复的第一选择; 用RDB来做不同程度的冷备,在AOF文件都丢失或损坏不可用的时候,还可以使用RDB来进行快速的数据恢复
    如果同时使用RDB和AOF两种持久化机制,那么在redis重启的时候,会使用AOF来重新构建数据,因为AOF中的数据更加完整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值