• 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持久化;

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

  • 相关阅读:
    通过内网穿透,在Windows 10系统下搭建个人《我的世界》服务器公网联机
    发展靠扩大人力规模,而不是技术研发创新,国内软件行业如何破局?
    springboot+基于vue的响应式代购商城APP的设计与实现 毕业设计-附源码191654
    CleanMyMac X4.14.7永久免费Mac电脑清理和优化软件
    rust 创建多线程web server
    Linux 入门
    【Leetcode】 100. 相同的树
    【vue3】watch监听器
    2022牛客暑期多校训练营9(ABEG)
    java计算机毕业设计springboot+vue宠物服务管理系统
  • 原文地址:https://blog.csdn.net/sinat_23931991/article/details/125300058