Redis中的持久化操作:浅谈ROB中的底层细节和实现源码

使用SAVE和BGSAVE生成rob文件。rob文件可以用来还原数据库状态

 

  • 底层细节:

而这两个方法的实质都是调用rdbsave()方法来执行保存数据库的操作

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX183NzAwX18=,size_20,color_FFFFFF,t_70,g_se,x_16

只是SAVE方法是单线程的,而bgsave方法相当于开了一个子进程来保存rob文件

 

  • 注意:

由此可见,当使用save命令时,redis不能执行其他操作。若此时有其他操作,会等待save执行完毕后继续执行

BGSAVE在保存时,若有其他命令,则会使用子进程进行保存,父进程用于执行其他命令

redis启动时,若检测到有rob文件,会自动载入(因为aof文件的使用频率比较高,所以若是同样有aof文件,会优先加载aof)

当rob文件在加载时,服务器处于阻塞状态,任何其他的命令都会被暂停

他们的执行方式还有些有趣的地方:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX183NzAwX18=,size_20,color_FFFFFF,t_70,g_se,x_16

  • 自动保存
    1. 如何设置自动保存

可以对redis进行设置,要求其进行自动保存。具体的命令方式如下:

0fbe8643699f410ba788e5aadc745e92.png

SAVE方法相当于向saveparam数据体系传入以上参数。这些参数的含义如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX183NzAwX18=,size_11,color_FFFFFF,t_70,g_se,x_16

SAVE 900 1的意义:900秒内,若其修改数达到1次,就对它进行保存

 

  1. 除了这个saveparam,还有两个参数是必要的,dirty(long)和lastsave(时间戳),分别记录修改的次数,和上一次修改的时间
  2. 自动保存的流程:

redis自动规定每隔100ms便对服务器检察一次,对其进行数据的保存,这个检查的函数是serverCorn。

每当执行这个函数时,会去检查saveparam中设置的值。由于我们有firty和lastsave,我们便可以知道距离上一次保存过了多久,以及中间修改了多少次。而这些条件刚好和saveparam的两个参数契合。所以当判断条件符合saveparam时,就会进行BGSAVE。

 

serverCorn的伪代码如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX183NzAwX18=,size_20,color_FFFFFF,t_70,g_se,x_16

  • ROB文件结构

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX183NzAwX18=,size_20,color_FFFFFF,t_70,g_se,x_16

 

其中databases是一个数组,用于保存database结构。database结构如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX183NzAwX18=,size_20,color_FFFFFF,t_70,g_se,x_16

k_v_paris是用于保存数据库数据

由于有些数据库数据会过期,所以它的结构分为两种,带过期时间和不带的

 

不带过期时间如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX183NzAwX18=,size_11,color_FFFFFF,t_70,g_se,x_16

带过期时间如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX183NzAwX18=,size_20,color_FFFFFF,t_70,g_se,x_16

 

value用于保存对象数据,这些对象和我们在之前在2中介绍的一样

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值