美文网首页
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