面试冲刺:45---Redis的持久化有哪几种方式?优缺点是什么?

一、Redis持久化

  • 持久化就是为了把Redis内存中的数据持久化保存到硬盘中,防止数据的丢失
  • Redis提供了两种持久化方式
    • RDB持久化
    • AOF持久化

二、RDB持久化

  • 关于RDB持久化,详情还可以参阅:https://blog.csdn.net/qq_41453285/article/details/106106568

触发方式

  • RDB持久化的触发有两种方式:手动触发与自动触发
  • 手动触发:
    • 通过执行save命令或者bgsave命令
    • save命令已经启用了,因为save会将当前Redis服务器阻塞,直到RDB文件创建完成之后才返回
    • bgsave会派生一个子进程去进行RDB的持久化,因为不会阻塞Redis服务器的主进程
  • 自动触发:
    • 通过在Redis配置文件中配置save选项,Redis会根据save选项的值每个一段时间执行一次bgsave命令来进行持久化
    • save选项可以设置多个,只要有一个条件满足,那么就会进行RDB持久化
    • 例如,下图中我们设置了3个save选项,只要满足下面三个条件中的其中一个,bgsave命令就会被执行:
      • 服务器在3600秒之内,对数据库进行了至少1次修改
      • 服务器在300秒之内,对数据库进行了至少100次修改
      • 服务器在60秒之内,对数据库进行了至少10000次修改

面试冲刺:45---Redis的持久化有哪几种方式?优缺点是什么?_第1张图片

  • RDB文件的载入:
    • 当第一次启动Redis的时候,只要检测到RDB文件存在,那么Redis就会自动载入RDB文件(但是收到AOF的影响,见下面介绍)
    • 当Redis在载入RDB文件的时候,Redis服务器会一直处于阻塞状态,直到载入工作完成
  • AOF持久化对RDB持久化的影响:如果Redis开启了AOF持久化,那么Redis就会优先使用AOF来还原数据库状态,这样就不会使用RDB文件了
  • RDB文件的优点:
    • Redis加载RDB恢复数据远远快于AOF的方式
    • RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据快照非常适用于备份,全量复制等场景。比如每6小时执行bgsave备份, 并把RDB文件拷贝到远程机器或者文件系统中(如hdfs),用于灾难恢复
  • RDB文件的缺点:
    • RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运 行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高
    • RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题

三、AOF持久化

  • 关于AOF持久化,详情还可以参阅:https://blog.csdn.net/qq_41453285/article/details/106106585
  • 因为RDB持久化不能提供实时的持久化,因此Redis又设计了AOF持久化
  • AOF持久化默认是不开启的,可以将appendonly选项设置为yes来开启AOF持久化

工作流程

  • AOF持久化大致分为4个过程:
    • 命令写入:Redis服务器每执行一条写命令,就会把这条写命令以“Redis协议(RESP协议)的格式”将这条命令追加到aof_buf缓冲区
    • 文件同步:AOF缓冲区根据对应的策略向硬盘做同步操作
    • 文件重写:随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的
    • 重启加载:当Redis服务器重启时,可以加载AOF文件进行数据恢复

面试冲刺:45---Redis的持久化有哪几种方式?优缺点是什么?_第2张图片

你可能感兴趣的:(面试冲刺)