redis持久化机制

redis中的数据默认是存到内存中的,存到内存中的数据 会不会丢失?不给他持久化到磁盘上,是有可

能丢失的 。有的时候需要使用redis的持久化机制。

reids的持久化机制有两种 RDB AOF

RDB持久化机制

RDB持久化机制是redis默认采用的持久化机制,这种机制是全量备份的机制。每次执行持久化操作,

redis都会把内存中所有数据读取一遍 ,然后存到磁盘上。

往磁盘同步数据 也可以手动执行redis的命令 ,save命令 ,另外一个是bgsave命令 。执行save命令或

者bgsave命令就会把内存中所有的数据 同步到磁盘的 dump.rdb文件中。

在这里插入图片描述

bgsave是 采用后台再开启一个子进程的方式来同步数据,他不会阻塞当前redis的主进程。现在一般都

会采用bgsave的方式来同步数据,save很少用了。

save会阻塞当前的主进程。就是在保存数据的这一段时间,比如你要花个5秒,主进程就不能进行对外提供服务了,这个肯定是灾难性的。

一般用bgsave,bgsave就是在开一个线程,类似于多线程,让它专门去干备份的事情。主进程继续提供服务

在这里插入图片描述

修改redis.conf配置文件

vim redis.conf

把这些去掉就是关闭,配置rdb的方式。

如果任意满足下面几种行为将会保存数据备份数据

900秒(15分钟)至少有一个key被修改

300秒 (5分钟)至少有一个key被修改

60秒 至少有一个key被修改

在这里插入图片描述

三个条件都不满足的情况下,数据将丢失。

dbfilename dump.rdb 就是配置保存文件的名称

dir ./ 是保存的文件保存到哪个路径下 , . 就是当前目录下

在这里插入图片描述

在这里插入图片描述

关掉 redis,再打开redis,查看下name是否还有

正常结束服务的情况下,默认会触发一次持久化,所以刚才保存的数据保存上了。

在这里插入图片描述

如果测试没有保存的情况。杀进程,或者虚拟机停电,

在这里插入图片描述

在这里插入图片描述

原先有一个主进程,主进程负责提供服务,往里面写数据、读数据,加入原先触发bgsave之前,内存里肯定有数据,物理内存的数据就是原先的数据,主进程通过key记录数据,内存里每个数据都有地址,主进程中记录这些地址,读取数据。如果现在执行了bgsave的命令,这个命令不管是手动执行还是自动执行,都会由主进程再创建一个子进程,由操作系统中fork的命令创建一个子进程,这个子进程里面也会记录内存里面这些数据的地址。开始fork创建出来的子进程和主进程里面记录的地址一样。主进程操作这块儿数据,子进程操作那块儿数据,互补影响。

最大问题:物理内存4G, fork出来进程后,得把内存立刻增大一倍,可能原先的数据可能已经存了1G数据了,现在fork进程,立刻内存变成了2G了,这样肯定是不能接受的。这意味着物理机只有4G内存,被redis使用用的顶多2G,2G占满之后,你要fork出来一份,那么物理内存立刻就满了。

主进程和子进程都操作同一块物理内存去做东西。

为了解决数据同步的问题,采用了一种机制:copy on write ,即写时复制

在这里插入图片描述

在子进程操作这块内存数据的时候,操作系统会把这块内存锁定,变成readonly 只读模式,如果要改,复制一份

RDB的默认 丢失数据的可能性是比较大的,如果对数据的持久化有更高的要求,可以使用AOF的机制去

同步数据

AOF持久化机制

AOF 持久化机制是 采用增量备份的机制。 AOF的持久化机制是 有一个类似于日志文件,然后我们每次

执行redis命令, 这些命令都会追加到这个类似的日志文件中。AOF的持久化文件 一般都会RDB的持久

化文件要大。

redis 默认是没有开启AOF持久化机制的。

设置开启 AOF日志

在这里插入图片描述

appendonly no 默认不开启AOF日志

这里 将 no 改为yes ,开启AOF日志

在这里插入图片描述

配置AOF缓存中的数据同步到AOF文件的机制

everysec 是每秒同步一次,所以最多只会丢失1秒的数据。

在这里插入图片描述

在这里插入图片描述

此时appendonly.aof长度为0,因为还没有往里面写东西。

查看appendonly.aof文件的内容

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值