Redis持久化机制

Redis 是跑在内存里面的,当程序重启或者服务器崩溃的时候,数据就会丢失,如果业务场景希望重启之后数据还在,就需要做持久化,把数据保存到可永久保存的存储设备中。

Redis 提供了两种方式来实现持久化

RDB

1RDB(Redis Database BackUp),记录 Redis 某一个时刻的全部数据,这个方式的本质是快照,直接保存二进制数据到磁盘中去,后序通过加载 RDB 文件恢复数据。

RDB 底层的原理:

当 Redis 停止服务的时候执行的是 save 命令,存储所有的数据。

正常情况下面执行的是 bgsave,是异步的操作。

bgsave 的原理 :

使用的是 fork 主进程的页表。fork 进程的时候是阻塞的,这里 fork 页表,页表是虚拟地址和物理地址之间的映射。还是公用一套物理地址的,只是页表不一样。

如果子进程在读数据,主进程不往里面写数据是不会发生问题的,如果子进程在读取数据,而主进程再写数据就会出现不一致的问题。

解决:

fork 底层使用 copy on write 技术。主进程写的写操作的时候 要先拷贝一份数据,执行写操作。

问题在于

使用 bgsave 执行快照的时候,如果主线程修改了数据,不管是否共享内存的数据,RBD 快照都无法写入主进程刚刚修改的数据,因为新拷贝了一份内存数据出来。 子进程写入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

全栈阿星

您的支持是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值