面试题:Redis缓存数据库,持久化机制有哪几种呢?

场景介绍

小白:杨哥,我们学的redis缓存数据库,关于他的持久化机制能给我详细讲讲吗?昨天面试时被问到了,我回答的不是很理想,哭唧唧。

杨哥:没问题,来,整起!

. 持久化方案

Redis的持久化机制有3种实现方案:RDB、AOF、混合持久化

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第1张图片

RDB方案

3.1持久化机制--自动

RDB是Redis默认的持久化机制,一般会按默认的规则自动触发数据的持久化。

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第2张图片

3.2持久化机制--手动执行

Redis也可以通过手动操作触发持久化,我们可以使用save和bgsave两个命令进行触发。

3.2.1 save命令

save命令会阻塞当前Redis的线程,直到RDB持久化过程完成为止,若持久化的数据较大,则会造成长时间的阻塞,不建议在线上环境直接使用该命令。

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第3张图片

3.2.2 bgsave命令

执行bgsave命令时,redis进程会通过fork操作创建出一个子进程,由子线程完成持久化操作,阻塞时间很短(微秒级)。这是对save命令的优化,在执行redis-cli shutdown命令关闭redis服务时,如果没有开启AOF持久化,就会自动执行bgsave。

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第4张图片

3.3 RDB的优缺点

优点:压缩后的二进制文件,适用于备份、全量复制,适用于灾难恢复;加载RDB恢复数据远快于AOF方式。

缺点:无法做到实时持久化,每次都要创建子进程,频繁操作成本过高;保存后的二进制文件,存在老版本不兼容新版本rdb文件的问题;数据可能丢失。

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第5张图片

AOF方案

AOF是通过保存Redis服务器执⾏的所有写操作命令来进行数据库备份的方案,并在服务器启动时,通过重新执行记录的这些命令来还原数据集。

4.1 开启和关闭

默认没有开启AOF,需要我们在redis.config中进行手动修改。

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第6张图片

4.2 执行流程

当redis服务重启时,可加载AOF文件进行恢复。以下是AOF方案的执行流程。

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第7张图片

4.3 写入磁盘机制

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第8张图片

4.4 重写机制

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第9张图片

4.5 AOF的优缺点

优点:

  • AOF比RDB更可靠。我们可以设置不同的fsync策略:no、everysec和?always,默认是everysec。在这种配置下,redis仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失1秒钟的数据。

  • AOF是一个纯追加的日志文件。即使日志因为某些原因包含了未写入完整的命令(如磁盘已满,写入中途停机等等)可以redis-check-aof轻易地修复这种问题。

  • 当?AOF文件件太大时,会重写。

  • AOF文件易于解析。

面试题:Redis缓存数据库,持久化机制有哪几种呢?_第10张图片

缺点:

AOF持久化的速度,相对RDB较慢的,存储的是一个文本文件,到了后期文件会比较大,传输困难。

混合使用方案

混合持久化并不是一种全新的持久化方式,而是对已有方式的优化。混合持久化只发于 AOF 重写过程。使用了混合持久化,重写后的新 AOF 文件件前半段是 RDB 格式的全量数据,后半段是 AOF 格式的增量数据。

优点:结合RDB和AOF的优点,更快的重写和恢复。

缺点:AOF文件中的RDB部分不再是AOF格式,可读性差。

 *威哥Java学习交流Q群:691533824
加群备注:CSDN推荐
 

你可能感兴趣的:(分布式,面试技巧,redis,缓存,数据库)