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


    场景介绍

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

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

    . 持久化方案

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

    RDB方案

    3.1持久化机制--自动

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

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

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

    3.2.1 save命令

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

    3.2.2 bgsave命令

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

    3.3 RDB的优缺点

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

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

    AOF方案

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

    4.1 开启和关闭

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

    4.2 执行流程

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

    4.3 写入磁盘机制

    4.4 重写机制

    4.5 AOF的优缺点

    优点:

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

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

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

    • AOF文件易于解析。

    缺点:

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

    混合使用方案

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

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

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

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

  • 相关阅读:
    选题排序(十大排序算法)
    麒麟系统开发笔记(十二):在国产麒麟系统上编译GDAL库、搭建基础开发环境和基础Demo
    图文详解Linux基础经典教程(08)——CentOS安装MySQL数据库
    小程序添加悬浮在线客服源码
    VSCode使用教程
    Redis:主从复制
    【新手上路常见问答】R和Python在数据科学的应用比较
    分享15个国家的独特国际商业习俗
    基于51单片机病房呼叫系统(64位病床)
    垂直定位系统实验平台
  • 原文地址:https://blog.csdn.net/finally_vince/article/details/126386824