美文网首页
Redis 服务器

Redis 服务器

作者: Robin92 | 来源:发表于2021-09-02 21:52 被阅读0次

《Redis 设计与实现》
《Redis 设计与实现》图片集

  • Redis 服务器处理厂请求的过高
  • serverCron 函数介绍
  • 服务器的启动过程

命令请求的执行过程

在客户端这边:

  • 用户在 Redis 客户端键入命令请求
  • Redis 客户端将命令请求转换成协议格式
  • Redis 客户端通过套接字发送请求给服务器
  • Redis 客户端接受服务器的返回将消息转换成可读格式打印

服务器:

  • 套接字中按协议格式读取命令
  • 将命令请求保存到客户端状态的输入缓冲区
  • 从输入缓冲区中解析命令
  • 调用命令执行器执行命令
  • 将返回结果写入客户端状态的输出缓冲区,并关联命令回复处理器
  • 当 Socket 可写时,执行命令回复处理器写回给客户端

命令执行器又分为如下几个步骤:

  • 查找命令。Redis 中存储一个命令表,是个字典结构;
  • 执行预备操作。如检查参数个数、身份验证、检查是否正在执行订阅操作、是否在执行事务等等;
  • 调用命令函数。将结果写回到客户端状态的输出缓冲区中;
  • 执行后续工作。如慢查询日志记录、AOF持久化、命令传播给从服务器等。

serverCron 函数

serverCron 函数每 100 ms 执行一次,负责管理服务器的资源,并保持服务器的良好运转。

有以下几个任务:

  • 更新服务器时间缓存(用于服务器中精度不高的时间使用上)
  • 更新 LRU 时钟(redisServer.lruclock 属性,可通过 INFO server 进行查看;此属性减去对象的 lru 属性用于计算对象的空闲时间,用 OBJECT IDLETIME key 查看)
  • 更新服务器每秒执行命令的次数记录值(INFO stats 查看 instantaneous_ops_per_sec 字段)
  • 更新服务器内存峰值记录值(INFO memory 查看)
  • 检查服务器状态 shutdown_asap 属性并处理是否关闭(服务器会拦截并优雅处理 SIGTERM 信号——做 RDB 持久化)
  • 调用 clientsCron 函数(对客户端状态进行检查:关闭超时的连接、收缩过大的输入缓冲区)
  • 调用 databasesCron 函数(对一部分数据库进行检查,删除过期键、收缩字典等)
  • 执行被延迟的 BGREWRITEAOF(此命令的执行会在判断 BGSAVE 是否需要执行且已被执行之后执行)
  • 检查持久化操作的运行状态,执行或替换 RDB、AOF 等(有记录子进程的 pid)
  • 将 AOF 缓冲区写入 AOF 文件
  • 关闭异常客户端(如输出缓冲区过大的)
  • 增加 cronloops 计数器的值(记录 serverCron 的执行次数)

初始化服务器过程

一个 Redis 服务器启动时:

  • 创建 redisServer 结构体实例
  • 设置运行ID、默认运行频率、默认配置文件路径、端口号、持久化条件、LRU时钟、创建命令表等
  • 载入配置选项
  • 初始化服务器数据结构(server 上的属性)
  • 还原数据库状态:自动载入 RDB、AOF 文件(AOF开启时用 AOF,关闭时用 RDB)
  • 开始执行事件循环

相关文章

网友评论

      本文标题:Redis 服务器

      本文链接:https://www.haomeiwen.com/subject/jvvcwltx.html