Redis 设计与实现

Posted K战神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 设计与实现 相关的知识,希望对你有一定的参考价值。

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 设计与实现 的主要内容,如果未能解决你的问题,请参考以下文章

Redis实现分布式锁(设计模式应用实战)

Redis跳跃表原理分析与基本代码实现(java)

Redis跳跃表原理分析与基本代码实现(java)

《Redis设计与实现》(16-21)个人学习总结

Redis设计与实现--多级数据库的实现

Redis设计与实现2.3:集群