Redis-执行流程

Redis-执行流程

起男 4 2025-08-30

Redis-执行流程

  1. 建立连接
    1. 客户端通过tcp协议和redis服务器建立连接
    2. redis的io多路复用机制监听到新的连接事件
    3. 主事件循环会分配一个连接应答处理器来处理这个连接
    4. 处理器为这个连接创建一个client结构体,用于存储所有状态
  2. 读取命令
    1. 客户端发送命令(resp格式)
    2. io多路复用监听到客户端的套接字可读(数据到达内核缓冲区)
    3. 事件循环触发命令请求处理器
    4. 处理器调用函数,将数据从内核套接字缓冲区读取到该客户端专属的输入缓冲区中
  3. 解析命令
    1. redis尝试从缓冲区中按照resp的格式解析数据(以\r\n作为分隔符)
    2. 解析出来的参数被保存在client结构体的argv(参数数组)和argc(参数个数)字段中
  4. 查找命令
    1. 取第一个参数argv[0]作为命令名
    2. 在命令表中查找该命令名(命令表是一个字典,在服务器启动时完成初始化,值是一个redisCommand结构体)
    3. redisCommand结构体包含了命令的所有元信息,其中的proc函数指针,指向了实际实现函数
  5. 执行前检查
    1. 在调用函数前,redis会进行一系列检查。如果任何一项失败,都直接返回错误。如:参数个数、认证、内存、集群、数据类型(部分)的检查
  6. 调用实现函数
    1. 根据之前找到的函数,和argv中的参数,调用函数
    2. 更新服务器的统计信息,如key命中次数,内存使用量等
  7. 执行后操作
    1. 命令执行完毕后,还会执行一些后续操作,如:慢查询日志、aof持久化、主从复制等
  8. 回复客户端
    1. 函数将执行结果写入客户端的输出缓冲区
    2. 事件循环会监听到客户端的套接字变得可写
    3. 事件循环调用命令回复处理器
    4. 处理器将输出缓冲区的内容通过网络发送回客户端
    5. 客户端收到回复并解析
  9. 持久化(可选)
    • AOF:根据appendfsync策略,由后台线程将aof缓冲区的内容刷到磁盘
    • RDB:如果满足了配置的保存条件,主进程会fork子进程来创建rdb快照,不影响主进程