redis copy-on-write机制
二. 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机制相关推荐
- Redis提供的持久化机制(RDB和AOF)
Redis提供的持久化机制 Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却 ...
- 内存淘汰算法_「承」Redis 原理篇——Redis 的内存回收机制
前言 关于 Redis 的"起承转合",我前面已经用五个篇章的长度作了一个 Redis 基础篇--"起"篇的详细阐述,相信大家无论之前有没有接触过 Redis, ...
- redis主键失效机制
Memcached删除主键的方式与Redis有何异同 首先,Memcached 在删除失效主键时也是采用的消极方法,即 Memcached 内部也不会监视主键是否失效,而是在通过 Get 访问主键时才 ...
- Redis面试 - 内存淘汰机制
Redis面试 - 内存淘汰机制 面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你 ...
- Redis的内存回收机制和数据过期淘汰策略
本文来说下Redis的内存回收机制和数据过期淘汰策略 文章目录 概述 为什么需要内存回收 过期删除策略 定时删除 惰性删除 定期删除 删除策略比对 过期删除策略原理 redisDb结构体定义 expi ...
- Redis持久化与过期机制
文章目录 Redis持久化与过期机制 1. 持久化机制 1.1 RDB(默认) 1.2 AOF 2. 过期机制 2.1 根据过期策略删除数据 2.2 当内存过大装不下新数据时,将启用淘汰机制 3. 其 ...
- 【Redis】回顾Redis知识点之事务机制
回顾Redis知识点之事务机制 Redis事务机制 为什么 Redis 不支持回滚(roll back) 假如事务执行一半的时候Redis宕机怎么办? 为什么需要内存回收? 上一篇回顾下Redis基础 ...
- Redis缓存的工作机制
Redis:缓存的工作机制 Redis缓存的工作机制 缓存的特征 Redis缓存处理请求 Redis作为旁路缓存 Redis中缓存的类型 只读缓存 读写缓存 参考文献 Redis缓存的工作机制 Red ...
- Redis中 锁的机制
Redis中 锁的机制 1. 悲观锁 执行操作前假设当前的操作肯定(或有很大几率)会被打断(悲观).基于这个假设,我们在做操作前就会把相关资源锁定,不允许自己执行期间有其他操作干扰. Redis不支持 ...
- Redis事务和锁机制
Redis事务和锁机制 1.Redis中的事务 1.1 什么是事务 1.2 特征 1.3 事务执行的3个阶段 1.4 事物的命令 1.5 事务内部的错误处理 1.6 Redis事物的原子性 1.7 R ...
最新文章
- php禁止代理ip访问_php禁止某ip或ip地址段访问的方法
- GNS3与SecureCRT关联问题
- 批次管理的质量跟踪案例分享_食品加工行业
- objectdatasouce的温故
- 遇见未来系列专访 | 聆听时代最前沿的声音
- drf 安装_drf 安装与配置
- Java程序员月薪三万,需要技术达到什么水平?
- codevs 4927 线段树练习5 线段树基本操作模板
- oracle循环数据,oracle循环插入数据
- python中pixels函数_Python+OpenCV3.3图像处理(一)
- nsis出错_NSIS错误(NSIS Error)的原因和解决方法总结
- Pytorch极简入门教程(十六)——预训练网络ResNet101微调
- 用 Python 搭建解一元二次方程的计算器
- cad抠图 lisp_五个实用的AutoCAD的lisp程序
- tp1900芯片对比7621a_TP-LINK WDR7660千兆版 厉害了单芯片TP1900-路由器交流
- python PIL 图像处理库简介(一)
- cadence、PADS、protel教程(PCB Layout图文教程终结版)
- 谁发明了验证码?你出来 保证不打死你
- win10下卸载office2010(测试多种方法后,成功实现)
- java请输入第一个人,Java-每日编程练习题③
热门文章
- Python 集合 day3
- linux文件目录类命令--pwd命令
- LeetCode 973. K Closest Points to Origin
- 微信点餐系统感悟(上1-6章)
- vue之vue-cookies
- 通过Jersey客户端API调用REST风格的Web服务
- 没事学学docker(三):配置阿里云镜像加速以及解决docker起不来的问题
- keep怎么生成运动轨迹_空间新物种 !| 垂直运动路径与商业综合体的整合与植入...
- Security+ 学习笔记5 常见的网络攻击
- 802.11帧间隔与无线用户加入网络过程