码迷,mamicode.com
首页 > 其他好文 > 详细

Redis 设计与实现 (三)

时间:2018-01-27 15:28:35      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:base   blog   cmd   生成   直接   tabs   持久化   启动   unix   

RDB 持久化

 一、生成RDB

  cmd:SAVE  --阻塞进程,执行完,才能有效接收客户端命令。

  cmd:  BGSAVE  --非阻塞,开启子进程保存。

          客户端如果发送SAVE和BGSAVE命令直接拒绝。

          BGWRITEAOF命令再BGSAVE执行完才能执行。  

 二、载入RDB

  服务器启动时自动执行,检测到RDB文件就会自动加载。

  如果开启AOF,优先使用执行AOF。

  AOF关闭的情况下,才会执行RDB。

   

三、自动间隔性保存

  save设置:一定条件后执行BGSAVE命令进行保存

  默认设置:

    save 900 1  //900秒内,进行一次修改,触发保存BGSAVE

    save 300 1  //300秒内,10次修改,触发保存BGSAVE  

    save 60  10000   //60秒内,1w次修改,触发保存BGSAVE 

struct saveparam {
    time_t seconds; //秒数
    int changes;//变化次数
};

还有两个参数:

dirty --上次数据库触发保存命令修改数   

lastsave -- 最后一次执行save时间

PORT_LONGLONG dirty;                /* Changes to DB from the last save */ 
 time_t lastsave;                /* Unix time of last successful save */

还有一个定时器默认100毫秒来检测是否满足save条件的方法:serverCron

int serverCron(struct aeEventLoop *eventLoop, PORT_LONGLONG id, void *clientData) 

 

四、RDB文件结构 

  | REDIS | db_version | database | EOF | check_sum |

  RDB文件开头是REDIS,来判定是否是RDB文件。

  db_version  版本号

  databse 包含任意多个数据库(键值对)

  EOF RDB文件结束标志

  check_sum  校验长度

Redis 设计与实现 (三)

标签:base   blog   cmd   生成   直接   tabs   持久化   启动   unix   

原文地址:https://www.cnblogs.com/sunchong/p/8358287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!