栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis的rdb持久化的cow技术(写时复制)及fork子进程理解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

redis的rdb持久化的cow技术(写时复制)及fork子进程理解

2022-01-01

把当前进程数据生成快照(.rdb)文件保存到磁盘的过程
两种触发方式:手动触发(save命令),自动触发(bgsave命令,推荐)
save命令:阻塞当前redis直到rdb持久化完成。若内存实例较大,会造成长时间阻塞,线上环境不建议使用。
bgsave命令:redis进程执行fork操作创建子进程来完成持久化,阻塞时间短(微秒级),save命令的优化。
bgsave触发的条件:
1在redis-cli中执行shutdown关闭redis服务时,如果没有开启aof持久化,自动执行bgsave命令
2redis.conf中save m n 若redis在m秒内由n次触发
3从节点刚上线时,触发主节点bgsave命令,然后将生成的rdb文件发送给从节点完成全量复制

进程是操作系统里面资源分配的最小单位。所以进程之间的内存是隔离的,虽然实际可能是同一部分。
操作系统中,内存区域是分页的,一页大概4KB。

fork是linux系统的调用:在当前进程中,fork一个子进程,子进程最初与主进程是共享一份内存区域的。由于主进程不断进行数据的写操作,与子进程存在并发冲突问题。此时,redis采用写时复制技术(cow):
当主进程写操作时,首先会复制一份将要涉及写操作的内存页。然后主进程在新复制的内存页上进行写操作,原有内存页继续供子进程持久化。

rdb持久化

恢复:将dump.rdb放到redis安装目录与redis.conf同级目录,重启redis即可
优点:1压缩后的二进制文件,适于备份,全量赋值,用于灾难恢复,2加载rdb恢复数据远快于aof
缺点:1无法做到实时持久化,每次都要创建子进程,频繁操作成本过高,2保存后的二进制文件,存在老版本不兼容新版本rdb文件的问题

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号