Redis持久化实现的简单过程
2023-03-31 10:59:46 时间
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文件替换旧版。
本文根据小林coding整理。旨在理解混合持久化实现过程。
相关文章
- 当文学遭遇数据:《红楼梦》中的统计学错误
- Go在酷狗数据库中间件的应用
- 随机森林:猜糖豆游戏揭示的机器学习算法
- 手把手教你使用Flask搭建ES搜索引擎(预备篇)
- 徒手用 Go 写个 Redis 服务器(Godis)
- 零售银行之大数据战略部署
- 数据变现的历史与未来
- 数据如何驱动网站页面设计和优化
- Python oracle数据库操作时,中文查询报错
- 凯文·凯利:大数据时代没有旁观者!
- 数据看Kobe,请让我以这样的方式说再见
- 如何利用声波对数据进行储存
- 专访|数据科学界的社交达人-定价科学家
- 根据提取城市数据演变而来的惊艳城市景观,虚拟描述
- 2016大数据发展7大趋势
- 数据可视化:NASA说北京的空气质量一直在改善
- 打开大数据研究的潘多拉魔盒
- 大数据开发—常见问题(3)
- 大数据投资:要关注场景化,也不可忽视后端团队
- 教你使用TensorFlow2对识别验证码