• Redis学习记录------Redis6持久化操作(十)


    Redis学习记录------Redis6持久化操作(十)

    Redis提供了两种不同形式地持久化方式。
    1.RDB(Redis DataBase)
    2.AOF(Append Only File)

    RDB

    RDB:在指定地时间间隔内,将内存中的数据集快照,写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。

    备份如何执行的?

    Redis会单独创建(fork)一个子进行来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程时不进行任何IO操作地,这就确保了极高地性能,如果需要进行大规模地数据恢复,且对于数据恢复地完整性不是非常敏感,那RDB方式要比AOF方式更加地高效,RDB缺点是最后一次持久化后地数据可能丢失
    默认备份文件名字:dump.rdb。

    Fork

    1. fork地作用是复制一个与当前进程一样的进程,新进程地所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程
    2. 在Liunx程序中,fork()会产生一个与父进程完全相同的子进程,但子进程在此后会exec系统调用,处于效率考虑,Linux中引入了”写时复制技术
    3. 一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。

    SNAPSHOTTING 快照

    dump.db文件
    在redis.conf配置文件中
    dbfilename
    dir
    stop-writes-on-bgsave-error
    rdbcompression

    dbfilename dump.rdb  // 默认备份文件名叫dump.rdb
    ...
    dir ./    //dump存放的文件目录,默认放在启动目录中
    ...
    //如果硬盘满了,yes则不再写入,关闭写入操作
    stop-writes-on-bgsave-error yes(|no)
    ...
    //是否启动压缩,yes压缩
    rdbcompression yes(|no)
    //完整性检查,yes检查,在存储快照后,可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗。
    rdbchecksum yes(|no)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    save 默认是注释掉的。
    格式 save 秒钟 写操作次数
    save 配置是一个非常重要的配置,它配置了 redis 服务器在什么情况下自动触发 bgsave 异步 RDB 备份文件生成。
    RDB是整个内存的压缩过的Snapshot,RDB的数据结构,可以配置复合的快照触发条件。
    默认是1分钟内改了1万次,或者5分钟内改了10此,或者15分钟内改了一次。
    禁用
    不设置save指令,或者给save传入空字符串。

    save <seconds> <changes>
    
    • 1

    save和bgsave对比

    save:save时只管保存,其他不管,全部阻塞,手动保存,不建议
    bgsave:Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。
    可以通过lastsave 命令获取最后一次成功执行快照的时间。

    RDB优、劣势

    优势:
    1.适合大规模的数据恢复
    2.对数据完整性和一致性要求不高更适合使用
    3.节省磁盘空间
    4.恢复速度快
    劣势:
    1.fork的时候,内存中的数据被克隆了一份,大致两倍的膨胀性需要考虑
    2.虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能。
    3.在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。

    如何停止

    动态停止RDB,
    save后给空值,表示禁用保存策略

    redis-cli config set svae ""
    
    • 1

    AOF

    日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录),只允追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据。意思就是:redis启动的话会根据日志文件的内容将写指令从前到后执行一次,以完成数据的恢复工作。
    RDB默认开启,AOF默认不开启,
    可以在配置文件中,名称默认位 appendonly.aof
    AOF文件的保存路径,同RDB的路径一致。

    //改为yes,则开启
    appendonly no
    ..
    //文件名appendonly.aof,也可以修改
    appendfilename ‘appendonly.aof’
    
    • 1
    • 2
    • 3
    • 4
    • 5

    RDB和AOF同时开启,系统默认取AOF的数据(数据不会存在丢失)

    AOF异常恢复

    1. 修改默认的appendonly no 改为yes
    2. 如遇到AOF文件损坏,通过/usr/local/bin/目录下执行
      redis-check-aof --fix appendonly.aof
      进行恢复
    3. 备份被写坏的AOF文件
    4. 恢复:重启redis,然后重新加载

    AOF同步频率设置

    在配置文件中可以配置。
    appendfsync always
    始终同步,每次Redis的写入都会立刻记入日志;性能较差但数据完整性比较好
    appendfsync everysec :每秒同步,每秒计入日志一次,如果宕机,本秒的数据可能丢失
    appendfsync no:redis不主动进行同步,把同步时机交给操作系统

    Rewrite压缩

    重写压缩操作:AOF采用文件追加方式,文件会越来越大,为避免出现这种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof

    如何实现重写,重写原理

    AOF文件持续增长过大时,会fork出一条新进程来将文件重写(也是先写临时文件,最后再rename),redis4.0版本后的重写,是指把rdb的快照,以二进制的形式附再新的aof头部,作为已有的历史数据,替换掉原来的流水账操作。
    no-appendfsync-rewrite
    AOF文件大于等于64M,并且并且大于等于64M的100%,128M时才会重写。

    重写流程

    1.bgrewriteaof触发重写,判断是否当前有bgsave或bgrewriteaof在运行,如果有,则等待该命令结束后再继续执行。
    2.主进程fork出子进程执行重写操作,保证主进程不会阻塞
    3.子进程遍历redis内存中数据到临时文件,客户端的写请求同时写入aof_buf缓冲区和aof_rewrite_aof重写缓冲区,保证原AOF文件完整,以及新AOF文件生成期间的新的数据修改动作不会丢失。
    4.1 子进程写完新的AOF文件后,向主进程发信号,父进程更新统计信息,
    4.2主进程把aof_rewrite_buf中的数据写入到新的AOF文件。
    5. 使用心得AOF文件覆盖旧的AOF文件,完成AOF重写。

    AOF持久化流程

    1.客户端的请求写命令会被append追加到AOF缓冲区内
    2.AOF缓冲区根据AOF持久化策略【always,everysec、no】将操作sync同步到磁盘的AOF文件中
    3.AOF文件大小超过重写策略或者手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量
    4.Redis重启时,会重新load加载AOF文件中写操作达到数据恢复的目的

    AOF优、劣

    优:
    1.数据完整性更高
    2.可读的日志文本,通过操作AOF稳健,可以处理误操作,并且文件损害可恢复
    劣:
    1.比起RDB占用更多的磁盘空间
    2.恢复备份速度慢
    3.每次读写都同步的话,会一定的性能压力
    4.存在个别BUG,造成恢复不成功

    用那个好

    官方推荐两个都启用。
    如果对数据不敏感,可以选单独用RDB
    不建议单独用AOF,因为可能出现BUG
    如果只是做纯内存缓存,可以都不用。

  • 相关阅读:
    左对齐和右对齐
    C/C++-内存
    Spring Cloud 架构
    国庆作业4
    idea创建父工程统一管理子工程
    科技部等6部门发文,推动AI场景创新;『精益副业』教程序员优雅做副业;『可扩展系统』设计全教程;人物动作数据集;前沿论文 | ShowMeAI资讯日报
    layui2.4.3版本下拉框实现多选
    CSS面试题整理
    刷题记录:牛客NC50965Largest Rectangle in a Histogram
    景联文科技语音数据标注:AUTO-AVSR模型和数据助力视听语音识别
  • 原文地址:https://blog.csdn.net/cz_chen_zhuo/article/details/126572159