Redis - RDB详解

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。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值