1、概念

即 将redis存在内存的数据定时dump到磁盘上实现RDB持久化

2、详解

先说Redis的两个命令:SAVE BGSAVE 这两个都会将redis内存中数据保存到磁盘中。

SAVE即直接将当前数据保存到磁盘中,在这种情况下,单线程的redis在SAVE的过程中会暂停所有数据处理,直到SAVE操作结束。

BGSAVE即Redis会fork一个新 进程,这个线程会带有Redis节点的所有内存数据,有独立的内存空间。那么这么说在fork的过程中redis仍然会有数据迟缓、客户端就绪的情况,实则没有,因为fork的初始时候,新进程的数据不是具体的内存数据,而是引用,和主进程使用同一个内存空间,这里运用的就是linux的写时复制技术(COW)

3、写时复制 COPY-ON-WRITE

背景:写时复制即Redis在fork时的一种linux内核实行的机制,其实可以思考没有这个机制下的redis,首先他没法去做SAVE的RDB,因为这种情况单线程的Redis会停滞,无法进行交易,在此背景下BGSAVE的设计即通过Fork一个新进程,同时Fork的机制让子进程内存空间完全相同与父进程。但是再次思考Fork一个新进程的过程中,在没有COW的情况下,首先Redis所占用的Linux内存不得超过50%,否则Fork时会报错;其次在Fork过程中,因为Redis是一个内存型数据库,Fork时会花费大量空间和资源去进行操作,也可能会导致程序的一段时间不可用。所以写时复制技术应运而生。

概念:写时复制技术实际行为是fork一个子进程时,子进程和父进程为保证资源会先存储共享节点的引用地址。在父进程或子进程对共享节点的数据进行写操作时,子节点会先复制共享节点的数据。即通过cow后,只有在存在写操作时才会去复制内存数据,这种设计保证了资源的高利用性。

4、配置

首先可以通过BGSAVE命令去执行RDB操作,也可以通过配置配置服务器的SAVE选项,让server每隔一定时间自动执行一次BGSAVE命令:save x y 。在x秒内数据库至少执行了y次修改,BGSAVE命令就会执行,可以设置多个条件,满足其一即执行BGSAVE。

Redis - RDB详解相关推荐

  1. 怎么往integer型数组添加数据_用户日活月活怎么统计 - Redis HyperLogLog 详解

    HyperLogLog 是一种概率数据结构,用来估算数据的基数.数据集可以是网站访客的 IP 地址,E-mail 邮箱或者用户 ID. 基数就是指一个集合中不同值的数目,比如 a, b, c, d 的 ...

  2. Redis命令详解:Connection

    最近在学习Redis的相关知识,上一篇我们也介绍了Redis的安装方法和基本数据结构,后面就打算开一个新的系列文章:Redis命令详解.既是对基础的巩固,也是为了以后查询起来更方便. 整个系列会分为以 ...

  3. redis学习笔记(2)之redis主从详解

    redis主从详解 主从详解 主从配置 拓扑 原理 数据同步 概念 复制偏移量 复制积压缓冲区 主节点运行ID Psync命令 全量复制流程 部分复制流程 心跳 缓冲大小调节 读写分离 内容来源为六星 ...

  4. python redis用法详解

    使用python来操作redis用法详解 1.1 2017.06.22 16:38* 字数 4875 阅读 96923评论 8喜欢 60 1.redis连接 redis提供两个类Redis和Stric ...

  5. java集成redis集群_spring集成redis cluster详解

    客户端采用最新的jedis 2.7 1.maven依赖: redis.clients jedis 2.7.3 2.增加spring 配置 classpath:connect-redis.propert ...

  6. redis数据结构详解之Hash(四)

    原文:redis数据结构详解之Hash(四) 序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个 ...

  7. Redis命令详解:Hashs

    Hash是一种String类型的field.value的映射表,因此,它非常适合存储对象.下面我们来一一介绍与Hash相关的命令. HDEL 最早可用版本:2.0.0 时间复杂度:O(N),其中N为要 ...

  8. python操作redis set_Python操作redis学习系列之(集合)set,redis set详解 (六)

    #-*- coding: utf-8 -*- importredis r= redis.Redis(host="126.56.74.190",port=639,password=& ...

  9. redis 数据类型详解 以及 redis适用场景场合

    redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...

最新文章

  1. aspnetcore mvc 异常处理_深入探究ASP.NET Core异常处理中间件
  2. html 3d转换动画,开源项目:CSS 3D转换和动画学习示例教程
  3. 注解 @Target 用法
  4. 【飞秋怎么用】高速文件传输
  5. ios ffmpeg(libfdk-aac) aac encode
  6. Mac 启动时屏幕上的特殊图像标识都是什么意思
  7. phpwind8.7升级9.0.1过程(三)20130107升级到20130227
  8. iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码
  9. 计算机动画推导,AE表达式实现逼真弹性动画
  10. 呼叫中心语音外呼营销系统软件成企业首选
  11. 龙蜥社区第十次运营委员会议顺利召开!
  12. 复数值神经网络matlab,学界 | Yoshua Bengio等提出深度复数网络:用复数构建深度神经网络(已开源)...
  13. 使用canvas画出满天繁星
  14. java 什么意思_Java中的“ ”是什么意思?
  15. java 图形化编程_java图形化编程
  16. LightningChart实时显示海量数据-超过10亿个数据点客户使用感言
  17. 写代码的时候,竟然发现了10+个【了不得】的网站,必须分享
  18. pp助手服务器开小差,无法连接game center服务器通信的处理方法
  19. 用C++实现仿QQ屏幕截图功能,以后不登QQ也能截图!
  20. nvidia驱动崩了 ubuntu_Ubuntu 16.04 Nvidia驱动程序不起作用

热门文章

  1. 开工第一天,腾讯、阿里、小米、金蝶等大公司都是怎么发开门利是的
  2. php框架微情,Weiphp
  3. EtherCAT理论学习笔记【一】-数据帧结构
  4. Part I 空气曲棍球 Chapter8(Building Simple Objects)
  5. 基于word2vec的中文词向量训练
  6. 河南洛阳计算机操作题,洛阳市中招计算机考试Word操作题:比尔盖茨的故事
  7. 计算机组成里的字和字节
  8. 一个典型人机混合智能案例的初步研究
  9. android ellipsize,Android:比android:ellipsize =“ end”更好的方法是将“ ...”添加到长字符串中?...
  10. 三十多岁学python来得及吗_三十岁宅男自学Python,以前没有编程经验|后院活动部...