【学习笔记】Redis学习笔记——第14章 客户端

第14章 服务器

14.1 命令请求的执行过程

14.1.1 发送命令请求

客户端将发送的命令准换成协议格式然后发送给服务器

14.1.2 读取命令请求

1>保存命令至客户端状态输入缓冲区

2>提取命令参数及参数个数保存至客户端状态的argv与argc字段中

3>获取命令执行器并执行命令

14.1.3 命令执行器:查找命令实现

从命令字典中找到命令对应的函数及各种该命令相关的属性字段

13.1.4 命令执行器:执行预操作

检查命令正确性及验证客户端,内存大小等

13.1.5 命令执行器:调用命令的实现函数

执行cmd指向的命令并保存回复在客户端输出缓冲区

14.1.6 命令执行器:执行后续工作

1>如果需要,增加一条慢查询日志

2>更新redisCommand的命令总耗时写执行次数

3>AOF写入

4>主从复制

14.1.7 将命令回复发送给客户端

14.1.8 客户端接收并转化成可读格式

14.2 serverCron函数

每100毫秒执行一次

14.2.1 更新服务器时间缓存

防止过多的调用系统时间,为打印日志等任务每100ms更新系统时间缓存

14.2.2 更新LRU时钟

Lru时钟用于计算键的空转时间,默认10秒更新一次,使用每个redis对象的lru字段(最后一次使用时间)和这个时钟字段计算对象的空转时间。(也就是说空转时间不是严格精确的)

14.2.3 更新服务器每秒执行命令次数

通过抽样估算服务器每秒执行的命令次数

14.2.4 更新服务器内存峰值记录

每次执行时都将当前内存值与最大内存值比较并更新

14.2.5 处理Sigterm信号

该信号用于让周期函数检测关闭服务器标识,如果需要关闭,则进行RDB持久化操作后关闭服务器

14.2.6 管理客户端资源

1>释放超时客户端

2>重置超长的输入缓冲区

14.2.7 管理数据库资源

主要是删除过期键

14.2.8 执行被延迟的BGREWRITEAOF

当RDB持久化执行时,AOF重写会被推迟,如果有被推迟的AOF重写任务,则执行。

14.2.9 检查持久化操作的运行状态

1>若有AOF或RDB生成完毕,则进行后续的文件替换

2>若没有则查看是否有延迟的AOF重写、是否需要执行RDB持久化、是否需要执行AOF重写

14.2.10 将AOF缓冲区的内容写入AOF文件

根据配置有不同的写入时效要求

14.2.11 关闭异步客户端

关闭输出缓冲区大小超限制的客户端

14.2.12 增加cronloops计数器值

在执行serverCron N次之后可能会执行XX代码,所以记录了serverCron执行的次数

14.3 初始化服务器

14.3.1 初始化服务器状态结构

初始化ID、默认配置、命令字典表等

14.3.2 载入配置项选择

通过启动时设置或配置文件,修改各配置

14.3.3 初始化服务器数据结构

创建一些可通过配置修改的数据结构及共享对象、时间事件、AOF文件等

14.3.4 还原数据库状态

通过AOF或RDB来恢复数据库状态(优先AOF)

14.3.5 执行时间循环

开始执行serverCron函数

相关推荐
lhh_qrsly1 小时前
HTTP / HTTPS / MQTT / MQTTs(嵌入式学习版)
学习·http·https
cao23339 小时前
关于 y0 y1 yn 变量名冲突说法的指正
笔记
~patience~18 小时前
WAV 逆向分析工具使用笔记
笔记
滴啦嘟啦哒18 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
xier_ran18 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名18 小时前
ai应用开发的学习笔记
服务器·笔记·学习
乔旭伟19 小时前
中小厂生产管理系统选型笔记:驱动方式、主线链路与成本结构
笔记·需求分析·规格说明书
xier_ran19 小时前
【infra之路】AI 编译器学习笔记(十四):为什么要 tiling,以及矩阵计算单元的“固定“
人工智能·笔记·学习
燕落南枝19 小时前
HTML 学习:辅助标签 label 与字符实体
前端·学习·html
hackchen19 小时前
LangChain 学习第 3 课 - 输出解析器(Output Parser)
数据库·学习·langchain