RDB持久化

Redis RDB 文件解析

redis是一个内存数据库,所有我们需要将他定时存在磁盘上,如果没有开启AOF,那么会生成RDB文件进行存储,其实就是个二进制文件

RBD文件通过SAVE BGSAVE进行创建,

SAVE会阻塞服务器进程,如果执行的话,那么client在这个期间发出的请求都不会响应

BGSAVE其实是创建fork出一个子进程来执行,其实本质他们都是在实行rdbsave

 

因为AOF的频率比RDB的频率高,所以启动服务器的时候,我们遵循着下面的原则

 

如果执行BGSAVE的时候,收到了save会被拒绝,因为他们都是执行rdbsave,两个进程同时进行的话会产生竞争

如果发出了BGREWRIEAOF的话,那么会等到BGSAVE执行完了在执行。相反的话会被拒绝,两个不可能同时进行,如果同时进行,会进行大量的写入磁盘操作

 

间隔性保存

struct redisserver{

  saveparam

  long long dirty

  time_t lastsave

}

上述三个其实表示了执行BGSAVE的条件

saveparam就是指向的条件

eg:

save 300 1 300秒内执行一次

dirty表示上一次bgsave结束后执行了多少次操作

lastsave表示的上面bgsave的时间戳

通过计算并且循环判断就是可以确定是否需要执行BGSAVE

 

 

 

REDIS服务器会每隔100毫秒执行依稀,servercron函数,就是检查这个条件

 

RDB文件结构:

第一个大写的常亮,表示读的是RDBle,version是版本,EOF是数据库读完的结束标志,check_sum是一个效验码

中间的是各个数据库中的数据

上面表示的每一个数据库中的数据,主要是keyvaluepairs

 

 

 

上面就是两种带过期键和不带的两种结构

对于key其实就是一个字符串,对于value

(1)如果大于20字节,那么就会以压缩的方式存储,如果不是,那么会按原样存储

无压缩的结构和压缩的结构如下

对于其他的比如列表对象,集合,有序集合,哈希,都会在最前有一个总的长度,对于值,如果是字符串的话,还会在前面有一个length的记录

 

转载于:https://www.cnblogs.com/13224ACMer/p/7075492.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值