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文件发送给从节点完成全量复制
bgave执行的前提:没有其他子进程正在执行,包含aof重写命令和bgsave命令

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

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

rdb持久化

命令:config set dir /usr/local 设置rdb文件保存路径
备份:bgsave 将dump.rdb保存到/usr/local下
恢复:将dump.rdb放到redis安装目录与redis.conf同级目录,重启redis即可
优点:1压缩后的二进制文件,适于备份,全量赋值,用于灾难恢复,2加载rdb恢复数据远快于aof
缺点:1无法做到实时持久化,每次都要创建子进程,频繁操作成本过高,2保存后的二进制文件,存在老版本不兼容新版本rdb文件的问题
关闭rdb:注释掉redis.conf中所有save m n,并添加save ""保存即可。

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

  1. fork()和写时复制

    写时复制技术最初产生于Unix系统,用于实现一种傻瓜式的进程创建:当发出fork(  )系统调用时,内核原样复制父进程的整个地址空间并把复制的那一份分配给子进程.这种行为是非常耗时的,因为它需要: · ...

  2. PHP 数组变量之写时复制的要点 只有数组才有的概念。

    1.如果数组指针位置非法,复制时,会将新数组指针初始化! 2.值传递时,PHP采用了一个COW(写时复制,copy on write)的优化措施! 写时复制的两个要点:  (实际开发可以使用reset ...

  3. QTL 容器 与 STL(1)- 写时复制

    QTL 与 STL 最大的区别之一 隐式共享,引用计数,写时复制 [注]STL 的 string 也具有 写时复制 技术 写时复制 (Copy-On-Write)技术,就是编程界"懒惰行为& ...

  4. Redis的RDB持久化和AOF持久化区别

    RDB机制的优势和略施 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘. 也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb ...

  5. redis stream持久化_一文了解:Redis的RDB持久化

    一文了解:Redis的RDB持久化 Redis是内存数据库,为了保证数据不在故障后丢失,Redis需要将数据持久化到硬盘上. Redis持久化有两种方式:一种是快照,全量备份.一种是AOF方式,连续增 ...

  6. Redis数据结构、持久化、缓存技术和集群详解

    redis 是什么? 是完全开源免费的,用c语言编写的,是一个单线程,高性能的(key/value)内存数据库,基于内存运行并支持持久化的nosql数据库 能干嘛? 主要是用来做缓存,但不仅仅只能做缓 ...

  7. Redis 本身有持久化,为什么还要写进 MySQL?

    权限控制 MySQL 有权限控制,用户可以精确到每个 IP 的每个账户,目标可以精确到每个表的每个操作. Redis 则是天生设计成完全开放权限,包括完全删除数据库的操作,任何人都可以执行.要么就只能 ...

  8. 【赵强老师】Redis的RDB持久化

    先看视频. [赵强老师]Redis的RDB持久化 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集 ...

  9. linux 进程0 写时复制,linux 写时复制 COW 过程梳理

    最后一次谈到缺页,是在一年多以前,http://blog..net/chenyu105/article/details/7061845 那时结个了草率的尾,定格在了handle_pte_fault,留 ...

最新文章

  1. 安装Docker和下载images镜像和常用Docker命令
  2. python flask 跨域问题 解决方法
  3. 将csv文件导入到数据库中
  4. 《数智碳中和》白皮书发布以数智技术助力关键相关方实现碳达峰碳中和
  5. 输入框限制只能输入数字,正数、负数、0,最多两位小数;数字输入框可以输入负数,并最多保留两位小数;el-number-input去掉四舍五入和自动补齐小数;
  6. 获取表单对象,得三种方法getElementById(), getElementsByName(), and getElementsByTagName() 和用法...
  7. 利用Excel VBA SQL做特殊文件浏览器
  8. Ubuntu18.04关闭zeitgeist-datahub自启动
  9. 跪求一个中国地图矢量图。
  10. Mybatis之插件
  11. Pycharm中Python包的下载与使用
  12. C# Revit二次开发
  13. 抓包安卓7以上ca证书安装方法
  14. 使用ROS提取udacity .bag文件中的压缩图片
  15. 梦三国2英霸模式貂蝉攻略(玩大流)
  16. 【洛谷】UVA437 巴比伦塔 The Tower of Babylon
  17. 搭建内网穿透工具-ngrok
  18. 白天 996, 我还能晚上669!
  19. java8中map的新方法--replace
  20. 打乱魔方软件_一种智能魔方打乱装置的制作方法

热门文章

  1. 梅科尔工作室——深度学习第四课
  2. 斗鱼扩展--宝箱记录查询(十)
  3. 梳理研发过程中的各种端到端流程
  4. 雪花飘html动画,用纯CSS3的animation制作雪花飘落、星星闪烁、按钮缩放、图片倾斜...
  5. 企业信息安全管理建设(0)
  6. 微店和有赞的区别_微店和有赞那个好_陕南赤子_新浪博客
  7. iOS开屏广告解决方案XHLaunchAd 3.0
  8. redis通过6379端口无法连接服务器
  9. 学习opencv:PS滤镜—查找边缘
  10. 结构体存储学生信息(键盘输入)计算总分并降序排序