深入浅出mysql第三版pdf百度云,工作感悟.pdfVIP

  • 6
  • 0
  • 约5.06千字
  • 约 5页
  • 2023-07-19 发布于上海
  • 举报

深入浅出mysql第三版pdf百度云,工作感悟.pdf

深⼊浅出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)

1亿VIP精品文档

相关文档