• 15. Redis 持久化


    Redis是内存数据库,如果不能将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能!

    RDB(Redis DataBase)

    在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,恢复时将快照文件文件直接读入内存里。
    Redis会单独创建(fork)一个子进程来进行持久化 ,会将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中主进程是不进行任何IO操做的,这就确保了极高的性能。如果需要进行大规模的数据回复,且对于数据回复的完整性不是非常敏感,那么RDB方式要比AOF方式更加高效。RDB的缺点就是最后一次持久化后的数据可能丢失。
    在这里插入图片描述

    RDB触发机制

    • save的规则满足的情况下,会自动触发rdb规则进行保存;
    • 执行flushall命令,也会触发rdb规则;
    • 退出redis,也会产生rbd文件;

    备份会自动生成dump.rdb文件。

    root@ubuntu:/var/lib/redis# ls
    dump.rdb        # 快照文件
    
    • 1
    • 2

    恢复dump.rdb文件
    只需要将rdb文件放到redis的启动目录就可以了,redis启动的时候会总动检查dump.rdb文件,并且恢复其中的数据。

    127.0.0.1:6379> CONFIG GET dir
    1) "dir"
    2) "/var/lib/redis"        # 如果这个目录下存在dump.rdb文件,启动时就会自动恢复其中的数据。
    
    • 1
    • 2
    • 3

    RDB方式优点:

    1. 适合大规模的数据恢复;
    2. 对数据的完整性要求不高;

    RDB方式缺点:

    1. 需要一定的时间建个进成操作,如果意外宕机了,这个最后一次修改的数据就会丢失;
    2. fork进程时,会占用系统资源;

    AOF (Append Only File)

    将我们的所有命令都记录下来,history,恢复的时候就把这个文件全部执行一遍!

    以日志的行是来记录每一个写操作,将redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可改写文件,
    redis启动之初就会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
    在这里插入图片描述

    AOF保存的是appendonly.aof文件.
    默认是不开启的,需要修改为appendonly no 为 yes,重启redis即可生效。

    在这里插入图片描述

    root@ubuntu:/home/lm/redis# cd /var/lib/redis/
    root@ubuntu:/var/lib/redis# ls
    appendonly.aof  dump.rdb
    
    • 1
    • 2
    • 3

    当进行操做之后,

    127.0.0.1:6379> set k1 v1
    OK
    127.0.0.1:6379> set k2 v2
    OK
    127.0.0.1:6379> set k3 v3
    OK
    127.0.0.1:6379> get k1
    "v1"
    127.0.0.1:6379> get k2
    "v2"
    127.0.0.1:6379> get k3
    "v3"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    如果aof文件有错误,redis无法启动,需要对aof文件进行修复,这时就可以用人redis自带的工具:redis-check-aof --fix appendpnly.aof.
    当文件被修复,启动时失败:
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    AOF方式优点:

    每一次修改都同步,文件的完整性会更加的好;
    每秒同步一次,可能会丢失一秒的数据;
    从不同步,效率最高;

    AOF方式缺点:

    相对于数据文件来说,aof远大于rdb,修复的速度也比rdb慢;
    aof运行效率也要比rdb慢,所以redis默认的配置就是rdb持久化;

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    GBase 8c V3.0.0数据类型——时间日期操作符
    SCHP(CVPR2019)-人体解析论文阅读
    @requestBody与@RequestParam
    Android系统通过属性设置来控制log输出的方案
    从进程,线程去了解浏览器内部的流程原理
    【JavaScript】解决 JavaScript 语言报错:Uncaught TypeError: XYZ is not a function
    C语言例3-11:使用算术运算符的例子。
    数据库安装记录——Mysql8.0.23 msi 保姆级安装教程
    [AIGC] 深度优先搜索(DFS)详解及其在LeetCode问题中的应用
    TS7031: Binding element ‘role‘ implicitly has an ‘any‘ type.
  • 原文地址:https://blog.csdn.net/sinat_23931991/article/details/125300058