- 6
- 0
- 约5.06千字
- 约 5页
- 2023-07-19 发布于上海
- 举报
深⼊浅出mysql第三版pdf百度云,⼯作感悟
什么是Redis的持久化
我们知道Redis的数据都存储在内存中,如果服务器突然宕机,那么内存数据将会全部消失,为了防⽌这种情况出现,利⽤⼀套机制来保证
Redis的持久化机制 内存数据存⼊到硬盘
数据不会因为故障⽽丢失,我们将这种机制称之为 ,该机制主要⽬的是将 中
Redis 提供两种持久化机制RDB(Redis DataBase)和AOF(Append-Only File)机制。
RDB-快照
快照是最简单的Redis持久化模式,也就是⽣成某个时间点的数据集,⽣成RDB⽂件,可以看到RDB⽂件中的数据是⾮常紧凑的,所以在恢
复数据的时候读取也是⾮常快的
触发RDB快照的⽅式有两种
⼿动触发
通过⼿动执⾏bgsave/save,显⽰触发⽣成快照
save命令:阻塞当前Redis服务器,直到RDB过程完成为⽌,对于内存 ⽐较⼤的实例会造成长时间阻塞,线上环境不建议使⽤
bgsave命令:Redis进程执⾏fork操作创建⼦进程,RDB持久化过程由⼦ 进程负责,完成后⾃动结束。阻塞只发⽣在fork阶段,⼀般
时间很短
配置参数 ⾃动触发
⾃动触发有以下⼏种情况 :
save m n
使⽤save相关配置,命令 。表⽰m秒内数据集存在n次修改时,⾃动触发bgsave
从节点执⾏全量复制
操作,主节点 ⾃动执⾏bgsave⽣成RDB⽂件发送给从节点
执⾏debug reload命令
重新加载Redis时,⾃动触发save命令
执⾏shutdown命令
时,如果没有开启AOF持久化功能⾃动执⾏bgsave
注意:在RDB持久化的过程中有两个问题需要考虑
1. RDB快照过程中Redis是否会停⽌对外提供服务
2. 如果没有停⽌服务,如何处理新的请求
针对上述问题我们先看⼀下RDB的持久化执⾏流程
fork⼀个⼦线程 共享⼀个数据区域
根据上图我们可以看到主线程主要是 来进⾏持久化操作,同时⽗⼦线程会 ,⽽且该区域设置为read-only
触发copyonwrite机制
⽅式,该⽅式下读的时候没有问题,但是写的时候会 来进⾏,接下来我们看看什么是 COW(Copy On Write) 机制
。
COW(Copy On Write) 机制
glibc
COW(Copy On Write) 机制属于操作系统处理多进程下的⼀种机制,Redis在持久化的时候会调⽤ 函数fork⼀个⼦进程。⽗⼦进程会
共享内存⾥⾯的代码段和数据段。
所以持久化的时候是完全交给⼦进程,⽽⽗进程继续处理客户端请求,所以在持久化的时候操作系统采⽤COW机制进程数据段页⾯的分
离。数据段是由很多操作系统的页⾯组合⽽成,当⽗进程对其中⼀个页⾯进⾏数据修改的时候,先将被⽗⼦线程共享的这⼀个页⾯复制并分
离出来,然后直接对复制的页⾯进程修改,⽽此时⼦进程对应的页⾯是没有修改的。
⽗进程的所有内存也权限设置为read-only
Redis采⽤该机制的简单流程如下。Lunix在fork之后,操作系统会将 ,然后⼦进程的地址
CPU硬件检测到内存也是read-only,于是会触发页异常中断(
空间指向⽗进程。当⽗进程只读时没有问题,当有写内存时,
fault) ⽗⼦进程各⾃持有独
,陷⼊到操作系统的⼀个中断例程。中断例程中,操作系统采⽤
原创力文档

文档评论(0)