redis点滴(四) redis持久化

RDB工作原理:

 每隔N分钟或N次写的操作后,Redis将数据库快照保存在名字为dump.rdb的二进制文件中。压缩,然后放到备份目录中。

 比如说,一下设置会让Redis在满足“60秒内有至少1000个键被改动”这一条件时,自己保存数据集:

save 60 1000

这种方法持久化方式被称为快照。

RDB相关参数:

save 900 1  #刷新快照到磁盘中,必须满足2个要求才会触发,即900秒之后只是有1个关键字发生变化

stop-wrties-on-bgsave-error yes #后台存储错误停止写

rebcompression yes #使用LZF压缩rdb文件

rebchecksum yes #存储和加载rdb文件时校验

dbfilename dump.rdb #设置rdb文件名

dir ./   #设置工作目录,rdb文件会写入该目录。

RDB的优点:

1.RDB是一个非常紧凑的文件,它保存了Redis在某个时间段的数据集。这种文件非常适合备份,比如说,你可以在最近24小时内,每小时备份一次RDB文件,并且在每个月的每一天,也备份一次RDB文件。这样的话,即使遇到了问题,也可以还原到不同的版本。

2.RDB在恢复大数据集时比aof恢复速度快

3.RDB可以最大化Redis性能:父进程在保存RDB文件时唯一要做的就是fork出一个子进行,然后这个子进程就会处理接下来所有保存工作,父进程无须操作I/O操作

4.RDB保存的是一个镜像文件,可以将它直接传送到别人数据模块中

RDB的缺点:

如果在2个保存点之后保存数据,可能会丢失1-N分钟的数据;如果你需要尽量在服务器故障时丢失数据,那么RDB不适合你。虽然RDB允许你设置不同的保存点来控制保存RDB文件的频率。但是,因为RDB文件需要保存的是整个数据集的状态,所以它并不是一个轻松的操作。因为你可能需要5分钟才保存一次RDB文件。在这种情况下,可能会丢失好几分钟的数据。


AOF工作原理:

也就是使用日志文件来记录所有的写操作命令,并在服务器启动时,重新启动这次命令来还原数据集。

AOF相关参数:

appendonly no  #是否打开aof日志功能

appendfsync always #每一个命令都立即写入到aof,安全,速度慢

appendfsync everysec  #每秒写1次

appendfsync no  #写入功能让操作系统判断缓存区大小统一写入到aof,同步速率慢,速度快

no-appendfasy-on-rewrite yes  #正在导入rdb快照过程中,需不要停止同步aof

auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写

auto-aof-rewrite-min-size 60mb #aof文件超过60M时才进行重写

注:在dump.rdb过程中 ,aof如果停止同步,会不会丢失?

答:不会,所有的操作缓存在内存的队列里,dump完成后,统一操作

注:aof重写是指什么?

答:aof重写是指把内存中命令,逆话命令,写入到aof日志里。

问:如果rdb文件与aof文件同时存在,优先用谁来恢复数据?

答:aof

问:恢复时rdb与aof哪个恢复的快?

答:rdb,因为其是数据的内存映射,直接载入到内存。而aof是命令,需要逐条执行

AOF的重写的执行步骤:

1.Redis执行fork(),现在同时拥有父进程和子进程

2.子进程开始将新AOF文件的内容写入到临时文件

3.对于所有新执行的写入命令,父进程一边将它们累计到一个内存缓存中,一边将这些改动追加到现有AOF文件的末尾;这样即使在重写的过程中发生停机,现有的aof文件也是安全的

AOF的优点

1.aof默认的策略是每秒钟执行一次,在这种配置下,Redis仍然可以保持良好的性能,并且就算发生了故障,也是丢失一秒钟的数据

2.Redis可以在AOF文件过大的情况自动进行重写:重写后的新aof文件包含了恢复当前数据集所需的最小命令集合,因为Redis在创建新的aof文件时,会继续将命令追加到现有的aof文件里面,即使重写过程发生了停机,而aof文件而不会丢失。而一旦新aof文件创建完毕,Redis就会从旧的aof文件中切换到新的aof文件,并开始对新的aof文件进行追加操作。

AOF的缺点

1对于相同数据集的文件,aof文件的体积通常比rdb文件大

2.根据fasy策略,aof的速度比rdb慢

3.aof在国庆曾经发生了这样的问题,因为个别命令的原因,导入aof文件重新载入时,无法将数据集恢复到保存时的原样。

4.当子线程完成重写工作时,它给父进程发送一个信号,父进程在接收信号之后,将内存中所有数据追加到新aof文件的末尾。

备份Redis数据

磁盘故障,节点失效,众多的问题都可能让你的数据消失不见,不进行备份是非常危险的

Redis对于数据备份是非常友好的。比如它可以在服务器运行的时候对数据进行备份的:RDB文件一旦创建之后,就不会进行任何修改。当服务器创建了一个新的RDB文件时,它先将文件的内容保存在一个临时的文件里,当临时文件写完之后,才会用临时文件去替换原来的RDB文件


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值