内核函数poll_wait

  • 作用:把当前进程加入到驱动里自定义的等待队列上
  • 当驱动事件就绪后,就可以在驱动里自定义的等待队列上唤醒调用poll的进程
    Read more »

RDB

  1. 文件结构

    一个完整的RDB文件包含上面各部分。
  • REDIS:5字节,检查是否为RDB文件。

  • db_version:4字节,字符串表示的整数,记录版本号。

  • database:0或n个数据库的键值对数据。

  • EOF:1字节,表示正文结束。

  • check_sum:8字节长无符号整数,保存一个校验和,根据前面四个部分计算得到。

    Read more »

Raft算法

  1. 基本概念
    在任何时刻,服务器节点都处于三个状态之一:leader、follower或者candidate。
  • follwer:不会发送任何请求,只相应leader和candidate的请求;
  • leader:处理所有客户端请求,如果一个可会断和follower通信,那么follower会重定向给leader;
  • candidate:用来选举新leader。
    下图展示了上面三种状态的转换:
    Read more »

哨兵模式

基本概念和详细流程见《Redis设计与实现》、《Redis5设计与源码分析》,只说下自己的理解。
下图是一个基本的主从复制的哨兵系统:

主要有三种角色:哨兵、主服务器,从服务器。

  • 哨兵:一种特殊的redis服务端,使用哨兵专用命令。用来监控主从状态,执行故障转移等。
  • 主服务器:执行客户端请求,同步自身数据到从服务器。
  • 从服务器:从主服务器同步数据。
    Read more »

3.0版本

redis的动态字符串在3.0中的实现如下:

1
2
3
4
5
struct sdshdr {
unsigned int len;
unsigned int free;
char buf[];
};
Read more »