Redis持久化实现
2021-05-08 15:45:08 0 举报
Redis持久化实现
作者其他创作
大纲/内容
fork
传播命令到AOF程序
传播命令到Replication程序
Y
拷贝的是这里
fe
魔数
进程2的虚拟内存空间
RDB实现
客户端
长度
命令请求
3、文件写入和保存
系统内核在 fork 时使用了写时复制(Copy-On-Write)技术,写时复制的主要作用就是 将复制推迟到写操作真正发生时 ,这也就避免了大量无意义的复制操作。 现在的多数操作系统中, fork 并不会立刻对父进程的内存空间进行复制,而是利用共享同一物理内存: 在 fork 函数调用时,父进程和子进程会被内核分配不同的虚拟内存空间,所以从进程的角度看它们访问的是不同的内存: 当父进程对共享的内存进行修改时,共享的内存会 以页为单位进行拷贝 ,父进程会对原有的物理空间进行修改,而子进程会使用拷贝后的新物理空间; 写时复制减少了不必要的物理内存的开销,使得进程的创建速度非常快,提供了一种很好的共享内存使用思想。
0
核心方案:Linux系统的进程内存隔离保证时点性,写时复制内存保证效率的原理。// 伪代码void rdbSaveBackground() { // 子进程处理 (利用操作系统的写时复制技术) if ((childpid = fork()) == 0) { // 落盘主方法 rdbSave() }}
REDIS
RBD 持久化配置 save m n
数据库号
value
RBD数据结构(以单条数据为例:set dibingfa niubi)
Redis 持久化方案一
2、缓存追加
进程1处理命令的进程
N
6
SELECTDB常量
AOF实现
Replication功能是否已打开?
校验和
Redis 持久化方案二
key
STRING
写时复制
AOF功能是否已打开?
niubi
处理后续步骤:清理资源等等
版本号
表示m秒内数据集存在n次修改时,自动触发一次持久化
服务器
0006
1、命令传播
dibingfa
AOF文件
快照
进程1内存空间
EOF
8
协议文本进行命令记录
内存
进程2持久化的进程
网络协议格式的网络命令(同步)
命令执行成功
进程1的虚拟内存空间
类型
0 条评论
下一页