二. strace工具和redis 的copy-on-write原理

strace : 监控系统内核进程的工具

首先, 讲一个工具strace. Linux的一个进程工具

这个工具的作用是: 用来最终redis的进程

可以参考这个文章: https://www.linuxidc.com/Linux/2018-01/150654.htm

比如,我们要追踪redis启动后的进程

strace -ff -o /usr/local/ooxx/out ./src/redis-server
ff: 表示追踪所有的进程和线程
-o: 表示日志输出的文件路径下的文件名 out是一个文件名的前缀, 如果有多个进程或线程, 以out开头

redis成功启动后,进程id是16023

我们去 /usr/local/ooxx目录下查看进程文件, 我们看到有这样四个文件

这里在介绍一个操作系统内核的命令/proc

proc这是一个操作系统内核

16023: 是我们启动的线程

他里面有一个task目录: 这里面是16023下启动的工作进程和线程

我们看到有4个工作的线程

和/usr/local/ooxx/下out的输出是一样的

下面举例:

redis持久化数据到磁盘的时候, 会新开一个进程. 然后用新的进程去执行持久化的操作. 我们用strace来追踪一下这个新创建的进程

第一步: 打开客户端, 执行bgsave

然后查看redis打印的日志输出

我们来分析一下执行bgsave打印的日志

Background saving started by pid 17042: 后台保存开始, 在17042这个进程上. 这个进程之前没有, 是新创建的
DB saved on disk: 数据已经保存到磁盘上
RDB: 0 MB of memory used by copy-on-write: 0M内存数据使用copy-on-write的方式被使用
Background saving terminated with success: 保存成功, 进程中断

首先这里创建了一个新的线程17042.

我们来看看,是不是创建了一个新的线程

这个进程怎么来的呢? 肯定是主进程创建的, 我们来看看. vi out.16023.

果然有17042这个进程. strace中输出的每一行都是一句命令. 我们看看创建17042这个进程使用的是什么命令? clone

这是redis后台执行持久化时使用的方式: copy-on-write.

那么, 什么是copy-on-write呢? copy-on-write的原理.

redis有一个主进程, 在写数据, 这时候有一个命令过来了, 说要把数据持久化到磁盘.

我们知道redis的worker是单线程的, 如果要持久化这个行为也放在单线程里, 那么如果需要持久化数据特别多, 将会影响用户的使用. 所以单开一个进程专门来做持久化的操作.

那么写数据, 写什么呢? 肯定是要把redis内存中的数据写入. 这时候, 其实redis内存中的数据保存的是一个虚拟地址. 他真实指向的是物理内存的地址(绿色部分)

这时候, 要拷贝, 就是把真实数据的地址拷贝一份到需要持久化的进程中

其实持久化进程这个时候只是指向了数据的地址, 内存消耗并不多. 如果这时候, 原来的数据修改了, 怎么办呢?

redis会开辟一块新的空间, 让写数据的地址指向新的空间

这样就不会影响持久化进程需要持久化的数据了.

这就是copy-on-write机制

redis copy-on-write机制相关推荐

  1. Redis提供的持久化机制(RDB和AOF)

    Redis提供的持久化机制 Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却 ...

  2. 内存淘汰算法_「承」Redis 原理篇——Redis 的内存回收机制

    前言 关于 Redis 的"起承转合",我前面已经用五个篇章的长度作了一个 Redis 基础篇--"起"篇的详细阐述,相信大家无论之前有没有接触过 Redis, ...

  3. redis主键失效机制

    Memcached删除主键的方式与Redis有何异同 首先,Memcached 在删除失效主键时也是采用的消极方法,即 Memcached 内部也不会监视主键是否失效,而是在通过 Get 访问主键时才 ...

  4. Redis面试 - 内存淘汰机制

    Redis面试 - 内存淘汰机制 面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你 ...

  5. Redis的内存回收机制和数据过期淘汰策略

    本文来说下Redis的内存回收机制和数据过期淘汰策略 文章目录 概述 为什么需要内存回收 过期删除策略 定时删除 惰性删除 定期删除 删除策略比对 过期删除策略原理 redisDb结构体定义 expi ...

  6. Redis持久化与过期机制

    文章目录 Redis持久化与过期机制 1. 持久化机制 1.1 RDB(默认) 1.2 AOF 2. 过期机制 2.1 根据过期策略删除数据 2.2 当内存过大装不下新数据时,将启用淘汰机制 3. 其 ...

  7. 【Redis】回顾Redis知识点之事务机制

    回顾Redis知识点之事务机制 Redis事务机制 为什么 Redis 不支持回滚(roll back) 假如事务执行一半的时候Redis宕机怎么办? 为什么需要内存回收? 上一篇回顾下Redis基础 ...

  8. Redis缓存的工作机制

    Redis:缓存的工作机制 Redis缓存的工作机制 缓存的特征 Redis缓存处理请求 Redis作为旁路缓存 Redis中缓存的类型 只读缓存 读写缓存 参考文献 Redis缓存的工作机制 Red ...

  9. Redis中 锁的机制

    Redis中 锁的机制 1. 悲观锁 执行操作前假设当前的操作肯定(或有很大几率)会被打断(悲观).基于这个假设,我们在做操作前就会把相关资源锁定,不允许自己执行期间有其他操作干扰. Redis不支持 ...

  10. Redis事务和锁机制

    Redis事务和锁机制 1.Redis中的事务 1.1 什么是事务 1.2 特征 1.3 事务执行的3个阶段 1.4 事物的命令 1.5 事务内部的错误处理 1.6 Redis事物的原子性 1.7 R ...

最新文章

  1. php禁止代理ip访问_php禁止某ip或ip地址段访问的方法
  2. GNS3与SecureCRT关联问题
  3. 批次管理的质量跟踪案例分享_食品加工行业
  4. objectdatasouce的温故
  5. 遇见未来系列专访 | 聆听时代最前沿的声音
  6. drf 安装_drf 安装与配置
  7. Java程序员月薪三万,需要技术达到什么水平?
  8. codevs 4927 线段树练习5 线段树基本操作模板
  9. oracle循环数据,oracle循环插入数据
  10. python中pixels函数_Python+OpenCV3.3图像处理(一)
  11. nsis出错_NSIS错误(NSIS Error)的原因和解决方法总结
  12. Pytorch极简入门教程(十六)——预训练网络ResNet101微调
  13. 用 Python 搭建解一元二次方程的计算器
  14. cad抠图 lisp_五个实用的AutoCAD的lisp程序
  15. tp1900芯片对比7621a_TP-LINK WDR7660千兆版 厉害了单芯片TP1900-路由器交流
  16. python PIL 图像处理库简介(一)
  17. cadence、PADS、protel教程(PCB Layout图文教程终结版)
  18. 谁发明了验证码?你出来 保证不打死你
  19. win10下卸载office2010(测试多种方法后,成功实现)
  20. java请输入第一个人,Java-每日编程练习题③

热门文章

  1. Python 集合 day3
  2. linux文件目录类命令--pwd命令
  3. LeetCode 973. K Closest Points to Origin
  4. 微信点餐系统感悟(上1-6章)
  5. vue之vue-cookies
  6. 通过Jersey客户端API调用REST风格的Web服务
  7. 没事学学docker(三):配置阿里云镜像加速以及解决docker起不来的问题
  8. keep怎么生成运动轨迹_空间新物种 !| 垂直运动路径与商业综合体的整合与植入...
  9. Security+ 学习笔记5 常见的网络攻击
  10. 802.11帧间隔与无线用户加入网络过程