redis深度剖析二(持久化)

rdb

是默认的持久化机制,生成快照即将内存数据写进磁盘;
生成rdb快照的几种方式
https://joonwhee.blog.csdn.net/article/details/111569283?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&utm_relevant_index=2

1)自动生成,在redis.conf中可配置,在指定的多少秒内有多少个key发生变化,就会触发生成快照;
2)执行save或者bgsave命令,前者是同步保存数据,后者是异步保存数据,同步的时候会阻塞其他线程往redis中写数据;
3)shutdown时候,会自动执行一次save命令;flushall命令也可以生成rdb快照保存数据至磁盘;
4)主从复制时候也可以触发生成rdb快照;
当生成快照文件dump.rdb后,可以备份生成一个dump.rdb.bak文件,当删掉dump.rdb文件后,此时需要先执行./redis-cli shutdown命令,再执行cp dump.rdb.bak dump.rdb生成一个dump.rdb文件,最后再启动redis,才能恢复原来dump.rdb文件中的数据,即需要先停机后,再根据.bak文件生成dump.rdb文件才ok,所以在redis关闭后,再将备份的rdb文件拷贝到原路径,则当redis启动后,就可以加载该rdb文件;
dump.rdb文件是一个二进制文件,在redis.conf中有个默认配置即开启了rdb类型文件的压缩;

aof

是append only file的缩写,采用日志的方式保存每个事物操作;redis.conf配置文件中默认aof关闭的,开启后,会追加到appendonly.aof文件中;
原理是先将每个操作写进页缓存,再每隔一定时间刷进磁盘中;在redis.conf文件中刷盘一共有三种时间配置
在这里插入图片描述

由于每次执行操作都会写进aof文件中,由于过于详细,所以aof文件会越来越大,所以重写功能应运而生;重写的目的是把中间过程的指令全部去掉,直接保留能实现结果的指令,然后重新生成一个aof文件以覆盖掉旧的aof文件,有自动触发重写,和手动触发重写;

aof重写应该叫aof校验

主进程创建了一个子进程,读取了当前redis内存中最新的键值状态,用一条命令代替之前多条命令,形成新的aof文件,替换旧文件。如果这期间主进程发生了新的写命令,那么主进程会将新命令加到aof重写缓冲区和aof文件缓冲区中,aof重写缓冲区是在主进程fork出子进程之后开始启用。
当子进程完成对AOF文件重写之后,它会向父进程发送一个完成信号,父进程接到该完成信号之后,会调用一个信号处理函数,该函数完成以下工作:
将AOF重写缓存中的内容全部写入到新的AOF文件中;这个时候新的AOF文件所保存的数据库状态和服务器当前的数据库状态一致;
对新的AOF文件进行改名,原子的覆盖原有的AOF文件;完成新旧两个AOF文件的替换。

redis4.0混合持久化

重启redis时,重放aof日志很慢,用rdb快照+增量aof重放替代全量aof重放,大大提高效率。具体是当aof重写时,将重写这一刻之前的内存做rdb快照处理,并且将rdb快照内容和增量的aof修改内存数据的命令存在一起,都写入新的aof文件,等到重写完新的aof文件才会进行改名,覆盖原有的aof文件。当redis重启时,可以先加载rdb的内容,再重放增量aof日志,就可以完全替代之前的aof全量文件重放,因此重启效率大幅得到提升。
判断 aof 文件的前面部分是否为 rdb 格式,只需要判断前 5 个字符是否是 REDIS。这个是因为 rdb 持久化开头就是 REDIS, 同时 aof 命令开头一定不会是 REDIS(命令开头都是 *)。

redis持久化的思维脑图

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orcharddd_real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值