第五章:Redis持久化-RDB持久化

Redis持久哈分为RDB和AOF两种方式,持久化功能能有效避免因进程退出造成的数据丢失问题。下次重启时可以利用之前持久化的文件即可实现数据恢复;
 
RDB持久化
把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化分为手动和自动触发;
触发机制
  • 手动触发分别对应save和bgsave命令:
  1. save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存较大的实例会造成长时间的阻塞,线上不建议使用,save命令对应的日志是:DB saved on disk.
  2. bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。
  • 自动触发
  1. 在redis.conf配置文件中使用save相关配置,例如save m n,表示m秒内数据集存在n次修改时,自动触发bgsave;
  2. 如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点;
  3. 执行debug reload命令重新加载redsi时,也会自动触发save操作;
  4. 默认情况下执行shutdown命令,如果没有开启AOF持久化功能则自动执行bgsave;
RDB文件的处理
  • 保存:RDB文件默认保存在dir配置指定的目录下,通过dbfilename配置执定;
  • 压缩:Redis默认采用LZF算法对生成的RDB文件进行压缩处理,默认开启,可以通过参数config set rdbcompression {yes|no}动态设置;注意:压缩会消耗CPU、但可以大幅降低文件的体积,方便保存,因此建议线上开启;
  • 校验:如果Redis加载损坏的RDB文件时拒绝启动,并打印日志:short read or oom loading DB. unrecoverable error,aborting now;
RDB的优缺点
优点
  • RDB时一个紧凑的二进制文件,适合备份和全量复制等场景。
  • Redis加载RDB恢复数据速度远远快于AOF方式
缺点
  • RDB方式数据没办法做大实时持久化/秒级持久化,因为bgsave要fork进程,执行成本高
  • RDB文件使用特定二进制格式保存,无法兼容不同版本的Redis。

猜你喜欢

转载自www.cnblogs.com/use-D/p/10766039.html