登录
首页 >  数据库 >  Redis

Redis实现持久化的方式汇总

来源:脚本之家

时间:2023-01-08 13:56:52 175浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《Redis实现持久化的方式汇总》,介绍一下Redis持久化,希望对大家的知识积累有所帮助,助力实战开发!

Redis有3种实现持久化的方式:AOF日志、RDB快照、混合持久化

Redis写入AOF日志的过程

Redis执行完写操作命令后,将命令追加到server.aof_buf缓冲区
通过write()系统调用,将aof_buf缓冲区的数据写入到AOF文件
数据被拷贝到了内核缓冲区page cache
由内核决定何时将数据写入硬盘

Redis实现RDB快照

生成 RDB 文件的两个命令:save 和 bgsave

执行save命令会在主线程生成RDB文件,执行bgsave命令会创建一个子进程来生成RDB文件

执行bgsave命令时,会通过fork()创建子进程,子进程和父进程共享同一片内存数据。因为创建子进程的时候,子进程复制父进程的页表,但页表指向的物理内存还是一个。如果主线程执行读操作,则主线程和 bgsave 进程互不影响;如果主线程执行写操作,则被修改的数据会复制一份副本,然后 bgsave 子进程会把该副本数据写入 RDB 文件,在这个过程中,主线程仍然可以直接修改原来的数据

混合持久化

在AOF日志重写过程,当开启了混合持久化时,在AOF重写日志时,fork出来的重写子进程会先将与主线程共享的内存数据以RDB方式写到AOF文件,然后主线程处理的操作命令会被记录在重写缓冲区,重写缓冲区里的增量命令会以AOF方式写入到AOF文件,写入完成后通知主进程将含有的RDB格式和AOF格式的AOF文件替换旧版。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于数据库的相关知识,也可关注golang学习网公众号。

声明:本文转载于:脚本之家 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表