专栏名称: 程序员鱼皮
鹅厂全栈开发,持续分享编程技法和实用项目
今天看啥  ›  专栏  ›  程序员鱼皮

Redis 备份时,不能正常处理请求?

程序员鱼皮  · 公众号  ·  · 2024-08-21 16:00

文章预览

此答案节选自我们最近弄的  面试鸭刷题工具 ,更多 大厂常问面试题 ,可以点击下面的小程序进行阅读哈! 回答重点 默认情况下 Redis 生成 RDB 的过程是异步的(采用 bgsave),主线程会调用 fork 创建一个子线程,由子线程负责将内存的数据写入磁盘,生成 RDB 文件。 那生成 RDB 文件的时候,数据可以修改吗? 当然可以。主线程会正常处理客户端的请求,进行数据的修改。但数据被修改还叫快照吗? 此时就运用了 写时复制 的技术。 当父进程 fork 出一个子进程后,并不会把父进程的所有内存数据重新复制一份给子进程,而是让主进程和子进程共享相同的内存页面。 底层的实现仅仅复制了 页表 ,但映射的物理内存还是同一个。这样做可以加快 fork 的速度,减少性能损耗(fork会阻塞主线程)。 此时,父进程收到写命令,需要修改数据,那么父进 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览